{
  "contractName": "GoodMarketMaker",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_nom",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_denom",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "returnAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reserveBalance",
          "type": "uint256"
        }
      ],
      "name": "BalancesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "addInterest",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mint",
          "type": "uint256"
        }
      ],
      "name": "InterestMinted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nom",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "denom",
          "type": "uint256"
        }
      ],
      "name": "ReserveRatioUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldReserveRatio",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mint",
          "type": "uint256"
        }
      ],
      "name": "UBIExpansionMinted",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_fromConnectorBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_fromConnectorWeight",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_toConnectorBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_toConnectorWeight",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "calculateCrossConnectorReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_fromReserveBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_fromReserveRatio",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_toReserveBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_toReserveRatio",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "calculateCrossReserveReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_supply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reserveBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_totalRatio",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "calculateFundCost",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_supply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reserveBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_totalRatio",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "calculateLiquidateReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_supply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reserveBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_reserveRatio",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_depositAmount",
          "type": "uint256"
        }
      ],
      "name": "calculatePurchaseReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_supply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reserveBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_reserveRatio",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_sellAmount",
          "type": "uint256"
        }
      ],
      "name": "calculateSaleReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "scheme",
          "type": "address"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "reserveRatioDailyExpansion",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "reserveTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reserveSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "reserveRatio",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "gdSupply",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "setAvatar",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_nom",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_denom",
          "type": "uint256"
        }
      ],
      "name": "setReserveRatioDailyExpansion",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gdSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_tokenSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_reserveRatio",
          "type": "uint32"
        }
      ],
      "name": "initializeToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "calculateNewReserveRatio",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "expandReserveRatio",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "buyReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gdAmount",
          "type": "uint256"
        }
      ],
      "name": "sellReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "buy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gdAmount",
          "type": "uint256"
        }
      ],
      "name": "sell",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gdAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_contributionGdAmount",
          "type": "uint256"
        }
      ],
      "name": "sellWithContribution",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "currentPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_addTokenSupply",
          "type": "uint256"
        }
      ],
      "name": "calculateMintInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_addTokenSupply",
          "type": "uint256"
        }
      ],
      "name": "mintInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "calculateMintExpansion",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "mintExpansion",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_denom\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"returnAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reserveBalance\",\"type\":\"uint256\"}],\"name\":\"BalancesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"addInterest\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mint\",\"type\":\"uint256\"}],\"name\":\"InterestMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nom\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"denom\",\"type\":\"uint256\"}],\"name\":\"ReserveRatioUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveRatio\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mint\",\"type\":\"uint256\"}],\"name\":\"UBIExpansionMinted\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenAmount\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenAmount\",\"type\":\"uint256\"}],\"name\":\"buyReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fromConnectorBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_fromConnectorWeight\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_toConnectorBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_toConnectorWeight\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"calculateCrossConnectorReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fromReserveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_fromReserveRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_toReserveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_toReserveRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"calculateCrossReserveReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_supply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_totalRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"calculateFundCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_supply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_totalRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"calculateLiquidateReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"calculateMintExpansion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addTokenSupply\",\"type\":\"uint256\"}],\"name\":\"calculateMintInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"calculateNewReserveRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_supply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_reserveRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_depositAmount\",\"type\":\"uint256\"}],\"name\":\"calculatePurchaseReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_supply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_reserveRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_sellAmount\",\"type\":\"uint256\"}],\"name\":\"calculateSaleReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"currentPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"expandReserveRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gdSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokenSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_reserveRatio\",\"type\":\"uint32\"}],\"name\":\"initializeToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"scheme\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"mintExpansion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addTokenSupply\",\"type\":\"uint256\"}],\"name\":\"mintInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"reserveRatioDailyExpansion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reserveTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"reserveRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gdSupply\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gdAmount\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gdAmount\",\"type\":\"uint256\"}],\"name\":\"sellReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gdAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_contributionGdAmount\",\"type\":\"uint256\"}],\"name\":\"sellWithContribution\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"setAvatar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_denom\",\"type\":\"uint256\"}],\"name\":\"setReserveRatioDailyExpansion\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"buy(address,uint256)\":{\"details\":\"Updates the _token bonding curve params. Emits `BalancesUpdated` with the new reserve token information.\",\"params\":{\"_token\":\"The reserve token buying with\",\"_tokenAmount\":\"The amount of reserve token buying with\"},\"return\":\"(gdReturn) Number of GD that will be given in exchange as calculated by the bonding curve\"},\"buyReturn(address,uint256)\":{\"details\":\"Calculates the buy return in GD according to the given _tokenAmount\",\"params\":{\"_token\":\"The reserve token buying with\",\"_tokenAmount\":\"The amount of reserve token buying with\"},\"return\":\"Number of GD that should be given in exchange as calculated by the bonding curve\"},\"calculateCrossConnectorReturn(uint256,uint32,uint256,uint32,uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"calculateCrossReserveReturn(uint256,uint32,uint256,uint32,uint256)\":{\"details\":\"given two reserve balances/ratios and a sell amount (in the first reserve token), calculates the return for a conversion from the first reserve token to the second reserve token (in the second reserve token) note that prior to version 4, you should use 'calculateCrossConnectorReturn' instead     * Formula: Return = _toReserveBalance * (1 - (_fromReserveBalance / (_fromReserveBalance + _amount)) ^ (_fromReserveRatio / _toReserveRatio))\",\"params\":{\"_amount\":\"input reserve amount\",\"_fromReserveBalance\":\"input reserve balance\",\"_fromReserveRatio\":\"input reserve ratio, represented in ppm, 1-1000000\",\"_toReserveBalance\":\"output reserve balance\",\"_toReserveRatio\":\"output reserve ratio, represented in ppm, 1-1000000\"},\"return\":\"second reserve amount\"},\"calculateFundCost(uint256,uint256,uint32,uint256)\":{\"details\":\"given a smart token supply, reserve balance, total ratio and an amount of requested smart tokens, calculates the amount of reserve tokens required for purchasing the given amount of smart tokens     * Formula: Return = _reserveBalance * (((_supply + _amount) / _supply) ^ (MAX_RATIO / _totalRatio) - 1)\",\"params\":{\"_amount\":\"requested amount of smart tokens\",\"_reserveBalance\":\"reserve token balance\",\"_supply\":\"smart token supply\",\"_totalRatio\":\"total ratio, represented in ppm, 2-2000000\"},\"return\":\"amount of reserve tokens\"},\"calculateLiquidateReturn(uint256,uint256,uint32,uint256)\":{\"details\":\"given a smart token supply, reserve balance, total ratio and an amount of smart tokens to liquidate, calculates the amount of reserve tokens received for selling the given amount of smart tokens     * Formula: Return = _reserveBalance * (1 - ((_supply - _amount) / _supply) ^ (MAX_RATIO / _totalRatio))\",\"params\":{\"_amount\":\"amount of smart tokens to liquidate\",\"_reserveBalance\":\"reserve token balance\",\"_supply\":\"smart token supply\",\"_totalRatio\":\"total ratio, represented in ppm, 2-2000000\"},\"return\":\"amount of reserve tokens\"},\"calculateMintExpansion(address)\":{\"details\":\"Calculate how much G$ to mint based on expansion change (new reserve ratio), in order to keep G$ price the same at the bonding curve. the formula to calculate the gd to mint: gd to mint = (reservebalance / (newreserveratio * currentprice)) - gdsupply\",\"params\":{\"_token\":\"The reserve token\"},\"return\":\"How much to mint in order to keep price in bonding curve the same\"},\"calculateMintInterest(address,uint256)\":{\"details\":\"Calculates how much G$ to mint based on added token supply (from interest) and on current reserve ratio, in order to keep G$ price the same at the bonding curve formula to calculate the gd to mint: gd to mint = addreservebalance * (gdsupply / (reservebalance * reserveratio))\",\"params\":{\"_addTokenSupply\":\"amount of token added to supply\",\"_token\":\"the reserve token\"},\"return\":\"how much to mint in order to keep price in bonding curve the same\"},\"calculateNewReserveRatio(address)\":{\"details\":\"Calculates how much to decrease the reserve ratio for _token by the `reserveRatioDailyExpansion`\",\"params\":{\"_token\":\"The reserve token to calculate the reserve ratio for\"},\"return\":\"The new reserve ratio\"},\"calculatePurchaseReturn(uint256,uint256,uint32,uint256)\":{\"details\":\"given a token supply, reserve balance, ratio and a deposit amount (in the reserve token), calculates the return for a given conversion (in the main token)     * Formula: Return = _supply * ((1 + _depositAmount / _reserveBalance) ^ (_reserveRatio / 1000000) - 1)\",\"params\":{\"_depositAmount\":\"deposit amount, in reserve token\",\"_reserveBalance\":\"total reserve balance\",\"_reserveRatio\":\"reserve ratio, represented in ppm, 1-1000000\",\"_supply\":\"token total supply\"},\"return\":\"purchase return amount\"},\"calculateSaleReturn(uint256,uint256,uint32,uint256)\":{\"details\":\"given a token supply, reserve balance, ratio and a sell amount (in the main token), calculates the return for a given conversion (in the reserve token)     * Formula: Return = _reserveBalance * (1 - (1 - _sellAmount / _supply) ^ (1000000 / _reserveRatio))\",\"params\":{\"_reserveBalance\":\"total reserve\",\"_reserveRatio\":\"constant reserve Ratio, represented in ppm, 1-1000000\",\"_sellAmount\":\"sell amount, in the token itself\",\"_supply\":\"token total supply\"},\"return\":\"sale return amount\"},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_avatar\":\"The avatar of the DAO\",\"_denom\":\"The denominator to calculate the global `reserveRatioDailyExpansion` from\",\"_nom\":\"The numerator to calculate the global `reserveRatioDailyExpansion` from\"}},\"currentPrice(address)\":{\"details\":\"Current price of GD in `token`. currently only cDAI is supported.\",\"params\":{\"_token\":\"The desired reserve token to have\"},\"return\":\"price of GD\"},\"expandReserveRatio(address)\":{\"details\":\"Decreases the reserve ratio for _token by the `reserveRatioDailyExpansion`\",\"params\":{\"_token\":\"The token to change the reserve ratio for\"},\"return\":\"The new reserve ratio\"},\"initializeToken(address,uint256,uint256,uint32)\":{\"details\":\"Initialize a reserve token entity with the given parameters\",\"params\":{\"_gdSupply\":\"Initial supply of GD to set the price\",\"_reserveRatio\":\"The starting reserve ratio\",\"_token\":\"The reserve token\",\"_tokenSupply\":\"Initial supply of reserve token to set the price\"}},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"isRegistered()\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"isRegistered(address)\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"mintExpansion(address)\":{\"details\":\"Updates bonding curve based on expansion change and new minted amount\",\"params\":{\"_token\":\"The reserve token\"},\"return\":\"How much to mint in order to keep price in bonding curve the same\"},\"mintInterest(address,uint256)\":{\"details\":\"Updates bonding curve based on _addTokenSupply and new minted amount\",\"params\":{\"_addTokenSupply\":\"Amount of token added to supply\",\"_token\":\"The reserve token\"},\"return\":\"How much to mint in order to keep price in bonding curve the same\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"sell(address,uint256)\":{\"details\":\"Updates the _token bonding curve params. Emits `BalancesUpdated` with the new reserve token information.\",\"params\":{\"_gdAmount\":\"The amount of GD that are sold\",\"_token\":\"The desired reserve token to have\"},\"return\":\"Number of tokens that will be given in exchange as calculated by the bonding curve\"},\"sellReturn(address,uint256)\":{\"details\":\"Calculates the sell return in _token according to the given _gdAmount\",\"params\":{\"_gdAmount\":\"The amount of GD that are sold\",\"_token\":\"The desired reserve token to have\"},\"return\":\"Number of tokens that should be given in exchange as calculated by the bonding curve\"},\"sellWithContribution(address,uint256,uint256)\":{\"details\":\"Calculates the sell return with contribution in _token and update the bonding curve params. Emits `BalancesUpdated` with the new reserve token information.\",\"params\":{\"_contributionGdAmount\":\"The number of GD tokens that will not be traded for the reserve token\",\"_gdAmount\":\"The amount of GD that are sold\",\"_token\":\"The desired reserve token to have\"},\"return\":\"Number of tokens that will be given in exchange as calculated by the bonding curve\"},\"setAvatar(address)\":{\"details\":\"Function to set a new avatar and controller for scheme can only be done by owner of scheme\"},\"setReserveRatioDailyExpansion(uint256,uint256)\":{\"details\":\"Allows the DAO to change the daily expansion rate it is calculated by _nom/_denom with e27 precision. Emits `ReserveRatioUpdated` event after the ratio has changed. Only Avatar can call this method.\",\"params\":{\"_denom\":\"The denominator to calculate the global `reserveRatioDailyExpansion` from\",\"_nom\":\"The numerator to calculate the global `reserveRatioDailyExpansion` from\"}},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}}},\"title\":\"Dynamic reserve ratio market maker\"},\"userdoc\":{\"methods\":{\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol\":\"GoodMarketMaker\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol\":{\"keccak256\":\"0x59fb5b1c4c3f68c1694f6ff5698016ac8ee9401b61e87473113dc103b7a6b0ff\",\"urls\":[\"bzz-raw://7410f43989dea44e64bed870958ce9199606dd8a9783e79fe8deca7b544164af\",\"dweb:/ipfs/QmPrrdvp2ErwL6SJSveB3JANo7ivadSMnk9gpWZD8nR7hy\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeeFormula.sol\":{\"keccak256\":\"0x2ac93f891a65aa60b93e2b27552850dfa459b88f5a19edc29bb5bab0cc4f3eaa\",\"urls\":[\"bzz-raw://bddb94bc0230d959d2362887a253a47b91f0de6804cba8e4569a7cac47c39b5a\",\"dweb:/ipfs/QmTdkPQHRdzxJ7D7pi9cowLgYY9wVja416dhBwCsdtPEv5\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FormulaHolder.sol\":{\"keccak256\":\"0xb3c0d3bc21e71497784e1be11698ff501ee11545c3106bec2cae2e8af1bacd9b\",\"urls\":[\"bzz-raw://783b4e28b67231de0fbbe48e58f43f69db3f98fd7f75668edce145a55a9b5b17\",\"dweb:/ipfs/QmdeyRfeix3PGfaXqtRQpH1sjmjFpdtuGaPwnvRn7nHAWd\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":{\"keccak256\":\"0x282184478f1d618d3523b28a84a7f7003dfdc99cad120e5e358d2cce1f5fb491\",\"urls\":[\"bzz-raw://67e17ecb57b24c4fb801abc2c52c3148af3b967e28da4fb7e074d18efb7a57c1\",\"dweb:/ipfs/QmfZ8jXhdTHtxr3gfByRj4HnXnGynX7SLZWWGR8k768aGB\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityGuard.sol\":{\"keccak256\":\"0xcc395c0e8f812201b5ed1f45e7272120ee5ffe73bfe13e325dfd872aef235b22\",\"urls\":[\"bzz-raw://58f93e4b9f48ec31ac151208e4f9e6b356cc23dfc9585d846bc09bf35d6ff7be\",\"dweb:/ipfs/QmdxJHUCaFx8N66kkDhYdA4k6d2V91yBRG6sombuPxBq7X\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677.sol\":{\"keccak256\":\"0x8360b9e356df8584d95990bb7e772342b30d9e22b160f7c875fbca5c0b87453c\",\"urls\":[\"bzz-raw://97cc6e5586cedcd49462cc465a2a8fc5063d7ec6cb9533f4e0099969a75bd4b2\",\"dweb:/ipfs/QmXw6y4iXfqyJHDRrHdd5ofQ6E4cuHDw4LiYupReJ1rCBc\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol\":{\"keccak256\":\"0xc5683b28527097379ed090b28bb46e17a50a2c57ddcb3c7e028fcd04ddc64aef\",\"urls\":[\"bzz-raw://639f6b6cf65382faea738e6326d6aeb289b8b030cf02f40c54bc45ec098eda6d\",\"dweb:/ipfs/QmQi7dFcKiwUxSbzhus4CxFTdNJvUsfiqY6i3bD4RdMQrn\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677BridgeToken.sol\":{\"keccak256\":\"0x014fa09dca773b1406855e628687be50c1eb129894f45a8b5c9fc709d826968d\",\"urls\":[\"bzz-raw://23c6491c0c26471315010687d785a3724ae33198be6ed39828d1a4f7e6873cb4\",\"dweb:/ipfs/QmW62FXHtLdNGzB8Nq9XwmwHp6Jn8jgbAVyrU2j7c7w6By\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677Token.sol\":{\"keccak256\":\"0x553a103b911d77cecb2ce3f355b2370c4a23eb070593d7c8eb46f33e3a5ff141\",\"urls\":[\"bzz-raw://e37438ce280964498b77f63bbe4d1f25c55ff4c178925447a70decceda06e46c\",\"dweb:/ipfs/QmbqCLhWjZqpFBnUVb3H7LkEbAaVmhf76Ln14oWnGimYGM\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol\":{\"keccak256\":\"0x7b91359f6912641c7dbfeced9a5c47454acce7c2cab9205d00b8049d228d7b78\",\"urls\":[\"bzz-raw://3a09bc6936d0179e2e5be2687446532d63135bc537f7ab246c6a1101d4849c1f\",\"dweb:/ipfs/QmNshqF7Xu7UX8BryKYRbnRQdTfytPappxkHq5xMxF5vpE\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/BancorFormula.sol\":{\"keccak256\":\"0xa8b83d6e46b4c2b5cf29c3572df676605ec37b8ef9b51ca6627ee225d9c51a77\",\"urls\":[\"bzz-raw://021c034dffe504492175527a436c00e898dfbf508ffb4e68f3e2a059f8934b61\",\"dweb:/ipfs/QmayhA4XBR7SYRQRRgngDcjRWUfJPmgMTbwskjZaEkznJ1\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol\":{\"keccak256\":\"0x951b08d2bf3aa8d2da3322220bdff8473457ea52845a6c76ab7732bcbccaaf9a\",\"urls\":[\"bzz-raw://7728a9ba486bddaa950c37c033522af874d518e9b53e4f844320bed6e14d41eb\",\"dweb:/ipfs/QmdEFS6efb3QFWoWhvfy9xHBvykQVbfnF6raqUsn9mhAnu\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/MinterRole.sol\":{\"keccak256\":\"0x3199053db04cdae6c9b4380921a4a4ee720b568d6a9660883b29d25fbec31bc0\",\"urls\":[\"bzz-raw://1b0ff368e21d6007c06e4cfb286fe59d7d7d3ec06283300c9be2153ba11fa93a\",\"dweb:/ipfs/QmRPq2wZM4RAcbj31dP34GCr1CSy2qy3JqfXEkdVie4HLT\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]},\"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzz-raw://bbdbf9d3754fcdcc85aec0432fabcec914317b1c2081b43753442ed53853a34a\",\"dweb:/ipfs/QmVHWQBn5xQkQEHhyGNEeS5gjjALZEk5ZfcjFt7kL6MoLy\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xe195405e9993d575173cdb5dd408db7459a026b9a98085c1a3b676f020f46584\",\"urls\":[\"bzz-raw://f6beab874b52e710d2c42334e34bb5592146f7dd148d96ff32c0c474412bf2f4\",\"dweb:/ipfs/QmUKmVUX4Fif7dguPgC459cpGegiJd1s24YhgZUrBUkkDN\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0x37b840977505e5f6d74bc8fa3d0217facc7913d0ecf064da3e3b26494acd37de\",\"urls\":[\"bzz-raw://7456513521bae915089dfd5879b685e47f3f180ad9ffe24cc3b19275b1da28ed\",\"dweb:/ipfs/QmbM1avKkyyTHEeTs3CqheyZwgAMNzVi3iDudqBdUJ2WPM\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x60806040526000805461ffff19166006179055608380546001600160a01b03191690553480156200002f57600080fd5b506040516200383c3803806200383c833981810160405260608110156200005557600080fd5b50805160208201516040928301516001641c35fedd1560601b036021556001646c3390ecc9605e1b036022556001640cf801476160611b0360235560016431bdb23e1d605f1b0360245560016502fb1d8fe083605b1b0360255560016505b771955b37605a1b036026556001650af67a93bb5160591b0360275560016515060c256cb360581b036028556001651428a2f98d7360581b036029556001654d515663970960561b03602a55600165944620b0e70f60551b03602b55600166011c592761c66760541b03602c5560016602214d10d014eb60531b03602d55600166020ade36b7dbef60531b03602e5560016603eab73b3bbfe360521b03602f556001660782ee3593f6d760511b036030556001661ccf4b44bb4821604f1b0360315560016606e7f88ad8a77760511b0360325560016669f3d1c921891d604d1b03603355600166cb2ff529eb71e5604c1b03603455600166c2d415c3db974b604c1b0360355560016702eb40f9f620fda7604a1b0360365560016705990681d961a1eb60491b03603755600167055e12902701414760491b0360385560016714962dee9dc9764160471b0360395560016704ef57b9b560fab560491b03603a5560016712ed7b32a58f552b60471b03603b556001679131271922eaa60760441b03603c556001678b380f3558668c4760441b03603d556001680215f77c045fbe885760421b03603e556001600160831b03603f556001670f577eded5773a1160471b0384556001680eb5ec597592befbf5603f1b036041556001681c35fedd14b861eb05603e1b036042556001683619c87664579bc94b603d1b0360435560016867c00a3b07ffc01fd7603c1b03604455600168c6f6c8f8739773a7a5603b1b03604555600168bec763f8209b7a72b1603b1b0360465560016902dbb8caad9b7097b91b60391b03604755600169057b3d49dda84556d6f760381b03604855600169054183095b2c8ececf3160381b036049556001690a14517cc6b9457111ef60371b03604a5560016913545598e5c23276ccf160361b03604b556001692511882c39c3adea96ff60351b03604c55600169471649d87199aa99075760341b03604d557004429a21a029d4c1457cfbffffffffffff604e55700415bc6d6fb7dd71af2cb3ffffffffffff604f557003eab73b3bbfe282243ce1ffffffffffff6050557003c1771ac9fb6b4c18e229ffffffffffff605155700399e96897690418f785257fffffffffff605255700373fc456c53bb779bf0ea9fffffffffff60535570034f9e8e490c48e67e6ab8bfffffffffff60545570032cbfd4a7adc790560b3337ffffffffff60555570030b50570f6e5d2acca94613ffffffffff6056557002eb40f9f620fda6b56c2861ffffffffff6057557002cc8340ecb0d0f520a6af58ffffffffff6058557002af09481380a0a35cf1ba02ffffffffff605955700292c5bdd3b92ec810287b1b3fffffffff605a55700277abdcdab07d5a77ac6d6b9fffffffff605b5570025daf6654b1eaa55fd64df5efffffffff605c55700244c49c648baa98192dce88b7ffffffff605d5570022ce03cd5619a311b2471268bffffffff605e55700215f77c045fbe885654a44a0fffffffff605f556001600160811b036060557001eaefdbdaaee7421fc4d3ede5ffffffff6061557001d6bd8b2eb257df7e8ca57b09bfffffff6062557001c35fedd14b861eb0443f7f133fffffff6063557001b0ce43b322bcde4a56e8ada5afffffff60645570019f0028ec1fff007f5a195a39dfffffff60655570018ded91f0e72ee74f49b15ba527ffffff60665570017d8ec7f04136f4e5615fd41a63ffffff60675570016ddc6556cdb84bdc8d12d22e6fffffff60685570015ecf52776a1155b5bd8395814f7fffff60695570015060c256cb23b3b3cc3754cf40ffffff606a557001428a2f98d728ae223ddab715be3fffff606b5570013545598e5c23276ccf0ede68034fffff606c557001288c4161ce1d6f54b7f61081194fffff606d5570011c592761c666aa641d5a01a40f17ffff606e55700110a688680a7530515f3e6e6cfdcdffff606f557001056f1b5bedf75c6bcb2ce8aed428ffff6070556ffaadceceeff8a0890f3875f008277fff6071556ff05dc6b27edad306388a600f6ba0bfff6072556fe67a5a25da41063de1495d5b18cdbfff6073556fdcff115b14eedde6fc3aa5353f2e4fff6074556fd3e7a3924312399f9aae2e0f868f8fff6075556fcb2ff529eb71e41582cccd5a1ee26fff6076556fc2d415c3db974ab32a51840c0b67edff6077556fbad03e7d883f69ad5b0a186184e06bff6078556fb320d03b2c343d4829abd6075f0cc5ff6079556fabc25204e02828d73c6e80bcdb1a95bf607a556fa4b16f74ee4bb2040a1ec6c15fbbf2df607b556f9deaf736ac1f569deb1b5ae3f36c130f607c556f976bd9952c7aa957f5937d790ef65037607d556f9131271922eaa6064b73a22d0bd4f2bf607e556f8b380f3558668c46c91c49a2f8e967b9607f556f857ddf0117efa215952912839f6473e6608055608180546001600160a01b031916331790819055935192939192909184916001600160a01b03909116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3608280546001600160a01b0319166001600160a01b0383811691909117918290551615620008a257608260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200085457600080fd5b505afa15801562000869573d6000803e3d6000fd5b505050506040513d60208110156200088057600080fd5b5051608380546001600160a01b0319166001600160a01b039092169190911790555b50620008b882826001600160e01b03620008c516565b60865550620009de915050565b60008162000900620008ed856b033b2e3c9fd0803ce80000006001600160e01b036200091016565b600285046001600160e01b036200098516565b816200090857fe5b049392505050565b60008115806200092d575050808202828282816200092a57fe5b04145b6200097f576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b92915050565b808201828110156200097f576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b612e4e80620009ee6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636cb4b4c1116101045780639f2d0d07116100a2578063cce7ec1311610071578063cce7ec1314610647578063e72a083314610673578063e9833c2f14610699578063f2fde38b146106bf576101da565b80639f2d0d071461059d578063abfd231d146105c0578063bc179d45146105f5578063c3c5a54714610621576101da565b806379c1b450116100de57806379c1b450146104eb578063835bbd55146105285780638da5cb5b146105715780638f32d59b14610595576101da565b80636cb4b4c1146104af578063715018a6146104b757806374920d30146104bf576101da565b806346f7cb231161017c5780635cf3a7a91161014b5780635cf3a7a9146103ee57806365098bb31461041a5780636a989e6e146104575780636c197ff514610483576101da565b806346f7cb231461033657806349f9b0f71461035c578063545bf97e1461039157806354fd4d50146103cf576101da565b806322366844116101b8578063223668441461028057806329a00e7c1461029c578063371d52dc146102d15780633e21374e14610310576101da565b8063086cfca8146101df5780630b184866146102075780631da6bbfb1461024b575b600080fd5b610205600480360360208110156101f557600080fd5b50356001600160a01b03166106e5565b005b6102396004803603606081101561021d57600080fd5b506001600160a01b0381351690602081013590604001356107a0565b60408051918252519081900360200190f35b6102396004803603608081101561026157600080fd5b5080359060208101359063ffffffff6040820135169060600135610964565b610288610a43565b604080519115158252519081900360200190f35b610239600480360360808110156102b257600080fd5b5080359060208101359063ffffffff6040820135169060600135610a53565b6102f7600480360360208110156102e757600080fd5b50356001600160a01b0316610b24565b6040805163ffffffff9092168252519081900360200190f35b6102396004803603602081101561032657600080fd5b50356001600160a01b0316610c1f565b6102f76004803603602081101561034c57600080fd5b50356001600160a01b0316610eed565b6102396004803603608081101561037257600080fd5b5080359060208101359063ffffffff6040820135169060600135610fbe565b610205600480360360808110156103a757600080fd5b5080356001600160a01b0316906020810135906040810135906060013563ffffffff16611098565b6103d7611108565b6040805161ffff9092168252519081900360200190f35b6102396004803603604081101561040457600080fd5b506001600160a01b038135169060200135611112565b610239600480360360a081101561043057600080fd5b5080359063ffffffff602082013581169160408101359160608201351690608001356111ce565b6102396004803603604081101561046d57600080fd5b506001600160a01b0381351690602001356111e9565b6102396004803603604081101561049957600080fd5b506001600160a01b0381351690602001356112a5565b610239611414565b61020561141a565b610239600480360360408110156104d557600080fd5b506001600160a01b038135169060200135611475565b610239600480360360a081101561050157600080fd5b5080359063ffffffff60208201358116916040810135916060820135169060800135611546565b61054e6004803603602081101561053e57600080fd5b50356001600160a01b031661164e565b6040805193845263ffffffff909216602084015282820152519081900360600190f35b610579611675565b604080516001600160a01b039092168252519081900360200190f35b610288611684565b610205600480360360408110156105b357600080fd5b5080359060200135611695565b610239600480360360808110156105d657600080fd5b5080359060208101359063ffffffff6040820135169060600135611794565b6102396004803603604081101561060b57600080fd5b506001600160a01b03813516906020013561181f565b6102886004803603602081101561063757600080fd5b50356001600160a01b0316611960565b6102396004803603604081101561065d57600080fd5b506001600160a01b038135169060200135611a4d565b6102396004803603602081101561068957600080fd5b50356001600160a01b0316611b7b565b610239600480360360208110156106af57600080fd5b50356001600160a01b0316611c3d565b610205600480360360208110156106d557600080fd5b50356001600160a01b0316611dd0565b6106ed611684565b6106f657600080fd5b608280546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b15801561075257600080fd5b505afa158015610766573d6000803e3d6000fd5b505050506040513d602081101561077c57600080fd5b5051608380546001600160a01b0319166001600160a01b0390921691909117905550565b60006107aa611684565b6107b357600080fd5b6001600160a01b03841660009081526085602052604090206002810154859190610812576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b838510156108515760405162461bcd60e51b815260040180806020018281038252602f815260200180612deb602f913960400191505060405180910390fd5b6001600160a01b0386166000908152608560205260409020600281015486106108ab5760405162461bcd60e51b8152600401808060200182810382526029815260200180612da26029913960400191505060405180910390fd5b60006108bd878763ffffffff611ded16565b905060006108cb89836111e9565b60028401549091506108e3908963ffffffff611ded16565b600284015582546108fa908263ffffffff611ded16565b8084556002840154604080518a81526020810185905280820192909252606082019290925290516001600160a01b038b169133917fed639966d5b0a89f5ac16d6359c7707785de6e51a00f07dd3197e5fbf0a303749181900360800190a398975050505050505050565b600080851180156109755750600084115b8015610987575060018363ffffffff16115b801561099c5750621e848063ffffffff841611155b6109a557600080fd5b816109b257506000610a3b565b63ffffffff8316620f424014156109e9578460016109d6848763ffffffff611e0216565b03816109de57fe5b046001019050610a3b565b600080806109fd888663ffffffff611e3016565b9050610a0e8189620f424089611e42565b9093509150600060ff83166001610a2b8a8763ffffffff611e0216565b03901c8890036001019450505050505b949350505050565b6000610a4e30611960565b905090565b60008085118015610a645750600084115b8015610a76575060008363ffffffff16115b8015610a8b5750620f424063ffffffff841611155b610a9457600080fd5b81610aa157506000610a3b565b63ffffffff8316620f42401415610ad25783610ac3868463ffffffff611e0216565b81610aca57fe5b049050610a3b565b60008080610ae6858863ffffffff611e3016565b9050610af7818888620f4240611e42565b9093509150600060ff8316610b128a8663ffffffff611e0216565b901c9890980398975050505050505050565b6001600160a01b03811660009081526085602052604081206002810154839190610b83576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b610b8b612d7a565b506001600160a01b038416600090815260856020908152604091829020825160608101845281548152600182015463ffffffff169281018390526002909101549281019290925280610bdd5750620f42405b610c15683635c9adc5dea00000610c09610c0163ffffffff808616908490611e0216565b608654611f14565b9063ffffffff611f5516565b9695505050505050565b6001600160a01b03811660009081526085602052604081206002810154839190610c7e576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b610c86612d7a565b506001600160a01b0384166000908152608560209081526040808320815160608101835281548152600182015463ffffffff1693810193909352600201549082015290610cd286610b24565b90506000610d4f876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1257600080fd5b505afa158015610d26573d6000803e3d6000fd5b505050506040513d6020811015610d3c57600080fd5b5051601b9060ff1663ffffffff611ded16565b90506000610d94610d7363ffffffff80861690683635c9adc5dea0000090611e0216565b610d8f84600a0a610d838c611c3d565b9063ffffffff611e0216565b611f14565b90506000608260009054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b158015610de657600080fd5b505afa158015610dfa573d6000803e3d6000fd5b505050506040513d6020811015610e1057600080fd5b50516040805163313ce56760e01b81529051919250600091610e97916001600160a01b0385169163313ce56791600480820192602092909190829003018186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d6020811015610e8757600080fd5b5051601b9063ffffffff611ded16565b90506000610ec582600a0a610c09610ebf88600a0a8b60000151611e0290919063ffffffff16565b87611f77565b9050610ede876040015182611ded90919063ffffffff16565b9b9a5050505050505050505050565b6000610ef7611684565b610f0057600080fd5b6001600160a01b03821660009081526085602052604090206002810154839190610f5f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152608560205260409020600181015463ffffffff1680610f8d5750620f42405b610f9686610b24565b600192909201805463ffffffff191663ffffffff938416179081905590911695945050505050565b60008085118015610fcf5750600084115b8015610fe1575060008363ffffffff16115b8015610ff65750620f424063ffffffff841611155b80156110025750848211155b61100b57600080fd5b8161101857506000610a3b565b84821415611027575082610a3b565b63ffffffff8316620f424014156110495784610ac3858463ffffffff611e0216565b60008083870361105e8882620f424089611e42565b90935091506000611075888563ffffffff611e0216565b905060ff831688901b848183038161108957fe5b049a9950505050505050505050565b6110a0611684565b6110a957600080fd5b6040805160608101825292835263ffffffff91821660208085019182528483019586526001600160a01b039690961660009081526085909652942091518255925160018201805463ffffffff1916919094161790925551600290910155565b60005461ffff1681565b6001600160a01b03821660009081526085602052604081206002810154849190611171576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b611179612d7a565b506001600160a01b03851660009081526085602090815260409182902082516060810184528154808252600183015463ffffffff1693820184905260029092015493810184905292610c159290919088610a53565b60006111dd8686868686611546565b90505b95945050505050565b6001600160a01b03821660009081526085602052604081206002810154849190611248576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b611250612d7a565b506001600160a01b03851660009081526085602090815260409182902082516060810184528154808252600183015463ffffffff1693820184905260029092015493810184905292610c159290919088610fbe565b60006112af611684565b6112b857600080fd5b6001600160a01b03831660009081526085602052604090206002810154849190611317576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b6001600160a01b0385166000908152608560205260409020600281015485106113715760405162461bcd60e51b8152600401808060200182810382526029815260200180612da26029913960400191505060405180910390fd5b600061137d87876111e9565b6002830154909150611395908763ffffffff611ded16565b600283015581546113ac908263ffffffff611ded16565b8083556002830154604080518981526020810185905280820192909252606082019290925290516001600160a01b0389169133917fed639966d5b0a89f5ac16d6359c7707785de6e51a00f07dd3197e5fbf0a303749181900360800190a39695505050505050565b60865481565b611422611684565b61142b57600080fd5b6081546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3608180546001600160a01b0319169055565b600061147f611684565b61148857600080fd5b8161149557506000611540565b60006114a1848461181f565b6001600160a01b03851660009081526085602052604090206002810154815492935090916114d5828563ffffffff611e3016565b60028401556114ea818763ffffffff611e3016565b8355604080518781526020810184905280820186905290516001600160a01b0389169133917fbecd073f6198ce1d3038bf9a242d869e1f276e2370746f104c735fa8d4fa313c9181900360600190a35091925050505b92915050565b6000808611801561155d575060008563ffffffff16115b80156115725750620f424063ffffffff861611155b801561157e5750600084115b8015611590575060008363ffffffff16115b80156115a55750620f424063ffffffff841611155b6115ae57600080fd5b8263ffffffff168563ffffffff1614156115f1576115d2868363ffffffff611e3016565b6115e2858463ffffffff611e0216565b816115e957fe5b0490506111e0565b60008080611605898663ffffffff611e3016565b9050611613818a8a89611e42565b9093509150600061162a888563ffffffff611e0216565b905060ff831688901b848183038161163e57fe5b049b9a5050505050505050505050565b608560205260009081526040902080546001820154600290920154909163ffffffff169083565b6081546001600160a01b031690565b6081546001600160a01b0316331490565b6082546001600160a01b031633146116f4576040805162461bcd60e51b815260206004820181905260248201527f6f6e6c79204176617461722063616e2063616c6c2074686973206d6574686f64604482015290519081900360640190fd5b60008111611749576040805162461bcd60e51b815260206004820152601b60248201527f64656e6f6d696e61746f72206d7573742062652061626f766520300000000000604482015290519081900360640190fd5b6117538282611f77565b6086556040805183815260208101839052815133927fcd3db955892df8543ef392cb55c3f36e13ad4c38e151c8315101b3006ef105df928290030190a25050565b600080851180156117a55750600084115b80156117b7575060018363ffffffff16115b80156117cc5750621e848063ffffffff841611155b80156117d85750848211155b6117e157600080fd5b816117ee57506000610a3b565b848214156117fd575082610a3b565b63ffffffff8316620f424014156110495784610ac3838663ffffffff611e0216565b6001600160a01b0382166000908152608560205260408120600281015484919061187e576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b60825460408051631c2eb17b60e31b815290516000926001600160a01b03169163e1758bd8916004808301926020929190829003018186803b1580156118c357600080fd5b505afa1580156118d7573d6000803e3d6000fd5b505050506040513d60208110156118ed57600080fd5b50516040805163313ce56760e01b8152905191925060009161193a916001600160a01b0385169163313ce56791600480820192602092909190829003018186803b158015610e5d57600080fd5b905061195581600a0a610c09886119508b611c3d565b611f77565b979650505050505050565b6082546000906001600160a01b03166119b4576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60835460825460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b158015611a0c57600080fd5b505afa158015611a20573d6000803e3d6000fd5b505050506040513d6020811015611a3657600080fd5b5051611a4457506000611a48565b5060015b919050565b6000611a57611684565b611a6057600080fd5b6001600160a01b03831660009081526085602052604090206002810154849190611abf576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b6000611acb8686611112565b6001600160a01b0387166000908152608560205260409020600281015491925090611afc908363ffffffff611e3016565b60028201558054611b13908763ffffffff611e3016565b8082556002820154604080518981526020810186905280820192909252606082019290925290516001600160a01b0389169133917fed639966d5b0a89f5ac16d6359c7707785de6e51a00f07dd3197e5fbf0a303749181900360800190a35095945050505050565b6000611b85611684565b611b8e57600080fd5b6000611b9983610c1f565b6001600160a01b038416600090815260856020526040902060028101546001820154929350909163ffffffff90811690611bd79083908690611e3016565b6002840155611be586610eed565b50604080518281526020810184905280820186905290516001600160a01b0388169133917fdf7a14785c215a09814aa4ee13a4578dd9842e48d61a2dda15aadd4b98c8007d9181900360600190a35091949350505050565b6001600160a01b03811660009081526085602052604081206002810154839190611c9c576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b611ca4612d7a565b506001600160a01b038085166000908152608560209081526040808320815160608101835281548152600182015463ffffffff1681850152600290910154818301526082548251631c2eb17b60e31b815292519195169263e1758bd89260048082019391829003018186803b158015611d1c57600080fd5b505afa158015611d30573d6000803e3d6000fd5b505050506040513d6020811015611d4657600080fd5b50516040808401518451602086810151845163313ce56760e01b81529451959650610c15959394929390926001600160a01b0388169263313ce56792600480840193829003018186803b158015611d9c57600080fd5b505afa158015611db0573d6000803e3d6000fd5b505050506040513d6020811015611dc657600080fd5b5051600a0a610fbe565b611dd8611684565b611de157600080fd5b611dea81611f9b565b50565b600082821115611dfc57600080fd5b50900390565b600082611e1157506000611540565b82820282848281611e1e57fe5b0414611e2957600080fd5b9392505050565b600082820183811015611e2957600080fd5b600080600160811b8610611e5557600080fd5b600080866001607f1b890281611e6757fe5b04905070015bf0a8b1457695355fb8ac404e7a79e3811015611e9357611e8c8161200a565b9150611e9f565b611e9c816123ec565b91505b60008563ffffffff168763ffffffff16840281611eb857fe5b049050600160831b811015611ede57611ed081612496565b607f94509450505050611f0b565b6000611ee98261283a565b9050611efe81607f0360ff1683901c826128ca565b95509350611f0b92505050565b94509492505050565b60006b033b2e3c9fd0803ce8000000611f46611f308585612c67565b60026b033b2e3c9fd0803ce80000005b04612cca565b81611f4d57fe5b049392505050565b6000808211611f6357600080fd5b6000828481611f6e57fe5b04949350505050565b600081611f46611f93856b033b2e3c9fd0803ce8000000612c67565b600285611f40565b6001600160a01b038116611fae57600080fd5b6081546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3608180546001600160a01b0319166001600160a01b0392909216919091179055565b6000808080806fd3094c70f034de4b96ff7d5b6f99fcd88610612053576001607e1b840193506fd3094c70f034de4b96ff7d5b6f99fcd86001607f1b87028161204f57fe5b0495505b6fa45af1e1f40c333b3de1db4dd55f29a78610612096576001607d1b840193506fa45af1e1f40c333b3de1db4dd55f29a76001607f1b87028161209257fe5b0495505b6f910b022db7ae67ce76b441c27035c6a186106120d9576001607c1b840193506f910b022db7ae67ce76b441c27035c6a16001607f1b8702816120d557fe5b0495505b6f88415abbe9a76bead8d00cf112e4d4a8861061211c576001607b1b840193506f88415abbe9a76bead8d00cf112e4d4a86001607f1b87028161211857fe5b0495505b6f84102b00893f64c705e841d5d4064bd3861061215f576001607a1b840193506f84102b00893f64c705e841d5d4064bd36001607f1b87028161215b57fe5b0495505b6f8204055aaef1c8bd5c3259f4822735a286106121a257600160791b840193506f8204055aaef1c8bd5c3259f4822735a26001607f1b87028161219e57fe5b0495505b6f810100ab00222d861931c15e39b44e9986106121e557600160781b840193506f810100ab00222d861931c15e39b44e996001607f1b8702816121e157fe5b0495505b6f808040155aabbbe9451521693554f733861061222857600160771b840193506f808040155aabbbe9451521693554f7336001607f1b87028161222457fe5b0495505b6f7fffffffffffffffffffffffffffffff19860192508291506001607f1b828002049050600160801b838103830204840193506001607f1b8183028161226a57fe5b049150600160811b836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0383028161228e57fe5b04840193506001607f1b818302816122a257fe5b049150600360801b836f99999999999999999999999999999999038302816122c657fe5b04840193506001607f1b818302816122da57fe5b049150600160821b836f92492492492492492492492492492492038302816122fe57fe5b04840193506001607f1b8183028161231257fe5b049150600560801b836f8e38e38e38e38e38e38e38e38e38e38e0383028161233657fe5b04840193506001607f1b8183028161234a57fe5b049150600360811b836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161236e57fe5b04840193506001607f1b8183028161238257fe5b049150600760801b836f89d89d89d89d89d89d89d89d89d89d89038302816123a657fe5b04840193506001607f1b818302816123ba57fe5b049150600160831b836f88888888888888888888888888888888038302816123de57fe5b049390930195945050505050565b600080600160801b831061241c57600061240b6001607f1b8504612d19565b60ff1693841c936001607f1b029150505b6001607f1b83111561246a57607f5b60ff811615612468576001607f1b848002049350600160801b841061245f57600193841c9360ff6000198301161b91909101905b6000190161242b565b505b6f05b9de1d10bf4103d647b0955897ba806f03f80fe03f80fe03f80fe03f80fe03f88202049392505050565b6000670168244fdac780006001607f1b6f0fffffffffffffffffffffffffffffff84168080028290048082028390048083028490049485026710e1b3be415a00009092026705a0913f6b1e000091909102010192909181830204905080664807432bc1800002830192506001607f1b8282028161250f57fe5b04905080660c0135dca0400002830192506001607f1b8282028161252f57fe5b049050806601b707b1cdc00002830192506001607f1b8282028161254f57fe5b049050806536e0f639b80002830192506001607f1b8282028161256e57fe5b04905080650618fee9f80002830192506001607f1b8282028161258d57fe5b04905080649c197dcc0002830192506001607f1b828202816125ab57fe5b04905080640e30dce40002830192506001607f1b828202816125c957fe5b0490508064012ebd130002830192506001607f1b828202816125e757fe5b049050806317499f0002830192506001607f1b8282028161260457fe5b049050806301a9d48002830192506001607f1b8282028161262157fe5b04905080621c638002830192506001607f1b8282028161263d57fe5b049050806201c63802830192506001607f1b8282028161265957fe5b04905080611ab802830192506001607f1b8282028161267457fe5b0490508061017c02830192506001607f1b8282028161268f57fe5b04905080601402830192506001607f1b828202816126a957fe5b6721c3677c82b400009190049384010482016001607f1b019290506001607c1b8516156126fa5770018ebef9eac820ae8682b9793ac6d1e7767001c3d6a24ed82218787d624d3e5eba95f984020492505b6001607d1b851615612730577001368b2fc6f9609fe7aceb46aa619baed470018ebef9eac820ae8682b9793ac6d1e77884020492505b6001607e1b851615612765576fbc5ab1b16779be3575bd8f0520a9f21f7001368b2fc6f9609fe7aceb46aa619baed584020492505b6001607f1b851615612799576f454aaa8efe072e7f6ddbab84b40a55c96fbc5ab1b16779be3575bd8f0520a9f21e84020492505b600160801b8516156127cd576f0960aadc109e7a3bf4578099615711ea6f454aaa8efe072e7f6ddbab84b40a55c584020492505b600160811b851615612800576e2bf84208204f5977f9a8cf01fdce3d6f0960aadc109e7a3bf4578099615711d784020492505b600160821b851615612831576d03c6ab775dd0b95b4cbee7e65d116e2bf84208204f5977f9a8cf01fdc30784020492505b50909392505050565b60006020607f5b8060ff168260010160ff161015612889576000600260ff848401160490508460018260ff166080811061287057fe5b01541061287f57809250612883565b8091505b50612841565b8360018260ff166080811061289a57fe5b0154106128aa579150611a489050565b8360018360ff16608081106128bb57fe5b0154106101da57509050611a48565b60008083905060008090508360ff16858302901c9150816f03442c4e6074a82f1797f72ac000000002810190508360ff16858302901c9150816f0116b96f757c380fb287fd0e4000000002810190508360ff16858302901c9150816e45ae5bdd5f0e03eca1ff439000000002810190508360ff16858302901c9150816e0defabf91302cd95b9ffda5000000002810190508360ff16858302901c9150816e02529ca9832b22439efff9b800000002810190508360ff16858302901c9150816d54f1cf12bd04e516b6da8800000002810190508360ff16858302901c9150816d0a9e39e257a09ca2d6db5100000002810190508360ff16858302901c9150816d012e066e7b839fa050c30900000002810190508360ff16858302901c9150816c1e33d7d926c329a1ad1a80000002810190508360ff16858302901c9150816c02bee513bdb4a6b19b5f80000002810190508360ff16858302901c9150816b3a9316fa79b88eccf2a0000002810190508360ff16858302901c9150816b048177ebe1fa81237520000002810190508360ff16858302901c9150816a5263fe90242dcbacf0000002810190508360ff16858302901c9150816a057e22099c030d9410000002810190508360ff16858302901c9150816957e22099c030d941000002810190508360ff16858302901c91508169052b6b5456997631000002810190508360ff16858302901c915081684985f67696bf74800002810190508360ff16858302901c9150816803dea12ea99e49800002810190508360ff16858302901c9150816731880f2214b6e00002810190508360ff16858302901c91508167025bcff56eb3600002810190508360ff16858302901c915081661b722e10ab100002810190508360ff16858302901c9150816601317c7007700002810190508360ff16858302901c915081650cba84aafa0002810190508360ff16858302901c9150816482573a0a0002810190508360ff16858302901c9150816405035ad90002810190508360ff16858302901c915081632f881b0002810190508360ff16858302901c9150816301b2934002810190508360ff16858302901c915081620efc4002810190508360ff16858302901c915081617fe002810190508360ff16858302901c91508161042002810190508360ff16858302901c915081602102810190508360ff16858302901c915081600102810190508360ff166001901b856f0688589cc0e9505e2f2fee55800000008381612c5b57fe5b04010195945050505050565b6000811580612c8257505080820282828281612c7f57fe5b04145b611540576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611540576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080610100831015612d41575b6001831115612d3c57600192831c9201612d27565b611540565b60805b60ff811615612d7357600160ff82161b8410612d685760ff81169390931c92908117905b60011c607f16612d44565b5092915050565b604051806060016040528060008152602001600063ffffffff16815260200160008152509056fe474420616d6f756e7420697320686967686572207468616e2074686520746f74616c20737570706c795265736572766520746f6b656e206e6f7420696e697469616c697a6564000000474420616d6f756e74206973206c6f776572207468616e2074686520636f6e747269627574696f6e20616d6f756e74a265627a7a723158200bbc2cedbd60c0bcfe652548270f3aa8d63bec7b1bc5e3fde6e73eac1f9bea8e64736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80636cb4b4c1116101045780639f2d0d07116100a2578063cce7ec1311610071578063cce7ec1314610647578063e72a083314610673578063e9833c2f14610699578063f2fde38b146106bf576101da565b80639f2d0d071461059d578063abfd231d146105c0578063bc179d45146105f5578063c3c5a54714610621576101da565b806379c1b450116100de57806379c1b450146104eb578063835bbd55146105285780638da5cb5b146105715780638f32d59b14610595576101da565b80636cb4b4c1146104af578063715018a6146104b757806374920d30146104bf576101da565b806346f7cb231161017c5780635cf3a7a91161014b5780635cf3a7a9146103ee57806365098bb31461041a5780636a989e6e146104575780636c197ff514610483576101da565b806346f7cb231461033657806349f9b0f71461035c578063545bf97e1461039157806354fd4d50146103cf576101da565b806322366844116101b8578063223668441461028057806329a00e7c1461029c578063371d52dc146102d15780633e21374e14610310576101da565b8063086cfca8146101df5780630b184866146102075780631da6bbfb1461024b575b600080fd5b610205600480360360208110156101f557600080fd5b50356001600160a01b03166106e5565b005b6102396004803603606081101561021d57600080fd5b506001600160a01b0381351690602081013590604001356107a0565b60408051918252519081900360200190f35b6102396004803603608081101561026157600080fd5b5080359060208101359063ffffffff6040820135169060600135610964565b610288610a43565b604080519115158252519081900360200190f35b610239600480360360808110156102b257600080fd5b5080359060208101359063ffffffff6040820135169060600135610a53565b6102f7600480360360208110156102e757600080fd5b50356001600160a01b0316610b24565b6040805163ffffffff9092168252519081900360200190f35b6102396004803603602081101561032657600080fd5b50356001600160a01b0316610c1f565b6102f76004803603602081101561034c57600080fd5b50356001600160a01b0316610eed565b6102396004803603608081101561037257600080fd5b5080359060208101359063ffffffff6040820135169060600135610fbe565b610205600480360360808110156103a757600080fd5b5080356001600160a01b0316906020810135906040810135906060013563ffffffff16611098565b6103d7611108565b6040805161ffff9092168252519081900360200190f35b6102396004803603604081101561040457600080fd5b506001600160a01b038135169060200135611112565b610239600480360360a081101561043057600080fd5b5080359063ffffffff602082013581169160408101359160608201351690608001356111ce565b6102396004803603604081101561046d57600080fd5b506001600160a01b0381351690602001356111e9565b6102396004803603604081101561049957600080fd5b506001600160a01b0381351690602001356112a5565b610239611414565b61020561141a565b610239600480360360408110156104d557600080fd5b506001600160a01b038135169060200135611475565b610239600480360360a081101561050157600080fd5b5080359063ffffffff60208201358116916040810135916060820135169060800135611546565b61054e6004803603602081101561053e57600080fd5b50356001600160a01b031661164e565b6040805193845263ffffffff909216602084015282820152519081900360600190f35b610579611675565b604080516001600160a01b039092168252519081900360200190f35b610288611684565b610205600480360360408110156105b357600080fd5b5080359060200135611695565b610239600480360360808110156105d657600080fd5b5080359060208101359063ffffffff6040820135169060600135611794565b6102396004803603604081101561060b57600080fd5b506001600160a01b03813516906020013561181f565b6102886004803603602081101561063757600080fd5b50356001600160a01b0316611960565b6102396004803603604081101561065d57600080fd5b506001600160a01b038135169060200135611a4d565b6102396004803603602081101561068957600080fd5b50356001600160a01b0316611b7b565b610239600480360360208110156106af57600080fd5b50356001600160a01b0316611c3d565b610205600480360360208110156106d557600080fd5b50356001600160a01b0316611dd0565b6106ed611684565b6106f657600080fd5b608280546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b15801561075257600080fd5b505afa158015610766573d6000803e3d6000fd5b505050506040513d602081101561077c57600080fd5b5051608380546001600160a01b0319166001600160a01b0390921691909117905550565b60006107aa611684565b6107b357600080fd5b6001600160a01b03841660009081526085602052604090206002810154859190610812576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b838510156108515760405162461bcd60e51b815260040180806020018281038252602f815260200180612deb602f913960400191505060405180910390fd5b6001600160a01b0386166000908152608560205260409020600281015486106108ab5760405162461bcd60e51b8152600401808060200182810382526029815260200180612da26029913960400191505060405180910390fd5b60006108bd878763ffffffff611ded16565b905060006108cb89836111e9565b60028401549091506108e3908963ffffffff611ded16565b600284015582546108fa908263ffffffff611ded16565b8084556002840154604080518a81526020810185905280820192909252606082019290925290516001600160a01b038b169133917fed639966d5b0a89f5ac16d6359c7707785de6e51a00f07dd3197e5fbf0a303749181900360800190a398975050505050505050565b600080851180156109755750600084115b8015610987575060018363ffffffff16115b801561099c5750621e848063ffffffff841611155b6109a557600080fd5b816109b257506000610a3b565b63ffffffff8316620f424014156109e9578460016109d6848763ffffffff611e0216565b03816109de57fe5b046001019050610a3b565b600080806109fd888663ffffffff611e3016565b9050610a0e8189620f424089611e42565b9093509150600060ff83166001610a2b8a8763ffffffff611e0216565b03901c8890036001019450505050505b949350505050565b6000610a4e30611960565b905090565b60008085118015610a645750600084115b8015610a76575060008363ffffffff16115b8015610a8b5750620f424063ffffffff841611155b610a9457600080fd5b81610aa157506000610a3b565b63ffffffff8316620f42401415610ad25783610ac3868463ffffffff611e0216565b81610aca57fe5b049050610a3b565b60008080610ae6858863ffffffff611e3016565b9050610af7818888620f4240611e42565b9093509150600060ff8316610b128a8663ffffffff611e0216565b901c9890980398975050505050505050565b6001600160a01b03811660009081526085602052604081206002810154839190610b83576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b610b8b612d7a565b506001600160a01b038416600090815260856020908152604091829020825160608101845281548152600182015463ffffffff169281018390526002909101549281019290925280610bdd5750620f42405b610c15683635c9adc5dea00000610c09610c0163ffffffff808616908490611e0216565b608654611f14565b9063ffffffff611f5516565b9695505050505050565b6001600160a01b03811660009081526085602052604081206002810154839190610c7e576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b610c86612d7a565b506001600160a01b0384166000908152608560209081526040808320815160608101835281548152600182015463ffffffff1693810193909352600201549082015290610cd286610b24565b90506000610d4f876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1257600080fd5b505afa158015610d26573d6000803e3d6000fd5b505050506040513d6020811015610d3c57600080fd5b5051601b9060ff1663ffffffff611ded16565b90506000610d94610d7363ffffffff80861690683635c9adc5dea0000090611e0216565b610d8f84600a0a610d838c611c3d565b9063ffffffff611e0216565b611f14565b90506000608260009054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b158015610de657600080fd5b505afa158015610dfa573d6000803e3d6000fd5b505050506040513d6020811015610e1057600080fd5b50516040805163313ce56760e01b81529051919250600091610e97916001600160a01b0385169163313ce56791600480820192602092909190829003018186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d6020811015610e8757600080fd5b5051601b9063ffffffff611ded16565b90506000610ec582600a0a610c09610ebf88600a0a8b60000151611e0290919063ffffffff16565b87611f77565b9050610ede876040015182611ded90919063ffffffff16565b9b9a5050505050505050505050565b6000610ef7611684565b610f0057600080fd5b6001600160a01b03821660009081526085602052604090206002810154839190610f5f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152608560205260409020600181015463ffffffff1680610f8d5750620f42405b610f9686610b24565b600192909201805463ffffffff191663ffffffff938416179081905590911695945050505050565b60008085118015610fcf5750600084115b8015610fe1575060008363ffffffff16115b8015610ff65750620f424063ffffffff841611155b80156110025750848211155b61100b57600080fd5b8161101857506000610a3b565b84821415611027575082610a3b565b63ffffffff8316620f424014156110495784610ac3858463ffffffff611e0216565b60008083870361105e8882620f424089611e42565b90935091506000611075888563ffffffff611e0216565b905060ff831688901b848183038161108957fe5b049a9950505050505050505050565b6110a0611684565b6110a957600080fd5b6040805160608101825292835263ffffffff91821660208085019182528483019586526001600160a01b039690961660009081526085909652942091518255925160018201805463ffffffff1916919094161790925551600290910155565b60005461ffff1681565b6001600160a01b03821660009081526085602052604081206002810154849190611171576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b611179612d7a565b506001600160a01b03851660009081526085602090815260409182902082516060810184528154808252600183015463ffffffff1693820184905260029092015493810184905292610c159290919088610a53565b60006111dd8686868686611546565b90505b95945050505050565b6001600160a01b03821660009081526085602052604081206002810154849190611248576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b611250612d7a565b506001600160a01b03851660009081526085602090815260409182902082516060810184528154808252600183015463ffffffff1693820184905260029092015493810184905292610c159290919088610fbe565b60006112af611684565b6112b857600080fd5b6001600160a01b03831660009081526085602052604090206002810154849190611317576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b6001600160a01b0385166000908152608560205260409020600281015485106113715760405162461bcd60e51b8152600401808060200182810382526029815260200180612da26029913960400191505060405180910390fd5b600061137d87876111e9565b6002830154909150611395908763ffffffff611ded16565b600283015581546113ac908263ffffffff611ded16565b8083556002830154604080518981526020810185905280820192909252606082019290925290516001600160a01b0389169133917fed639966d5b0a89f5ac16d6359c7707785de6e51a00f07dd3197e5fbf0a303749181900360800190a39695505050505050565b60865481565b611422611684565b61142b57600080fd5b6081546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3608180546001600160a01b0319169055565b600061147f611684565b61148857600080fd5b8161149557506000611540565b60006114a1848461181f565b6001600160a01b03851660009081526085602052604090206002810154815492935090916114d5828563ffffffff611e3016565b60028401556114ea818763ffffffff611e3016565b8355604080518781526020810184905280820186905290516001600160a01b0389169133917fbecd073f6198ce1d3038bf9a242d869e1f276e2370746f104c735fa8d4fa313c9181900360600190a35091925050505b92915050565b6000808611801561155d575060008563ffffffff16115b80156115725750620f424063ffffffff861611155b801561157e5750600084115b8015611590575060008363ffffffff16115b80156115a55750620f424063ffffffff841611155b6115ae57600080fd5b8263ffffffff168563ffffffff1614156115f1576115d2868363ffffffff611e3016565b6115e2858463ffffffff611e0216565b816115e957fe5b0490506111e0565b60008080611605898663ffffffff611e3016565b9050611613818a8a89611e42565b9093509150600061162a888563ffffffff611e0216565b905060ff831688901b848183038161163e57fe5b049b9a5050505050505050505050565b608560205260009081526040902080546001820154600290920154909163ffffffff169083565b6081546001600160a01b031690565b6081546001600160a01b0316331490565b6082546001600160a01b031633146116f4576040805162461bcd60e51b815260206004820181905260248201527f6f6e6c79204176617461722063616e2063616c6c2074686973206d6574686f64604482015290519081900360640190fd5b60008111611749576040805162461bcd60e51b815260206004820152601b60248201527f64656e6f6d696e61746f72206d7573742062652061626f766520300000000000604482015290519081900360640190fd5b6117538282611f77565b6086556040805183815260208101839052815133927fcd3db955892df8543ef392cb55c3f36e13ad4c38e151c8315101b3006ef105df928290030190a25050565b600080851180156117a55750600084115b80156117b7575060018363ffffffff16115b80156117cc5750621e848063ffffffff841611155b80156117d85750848211155b6117e157600080fd5b816117ee57506000610a3b565b848214156117fd575082610a3b565b63ffffffff8316620f424014156110495784610ac3838663ffffffff611e0216565b6001600160a01b0382166000908152608560205260408120600281015484919061187e576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b60825460408051631c2eb17b60e31b815290516000926001600160a01b03169163e1758bd8916004808301926020929190829003018186803b1580156118c357600080fd5b505afa1580156118d7573d6000803e3d6000fd5b505050506040513d60208110156118ed57600080fd5b50516040805163313ce56760e01b8152905191925060009161193a916001600160a01b0385169163313ce56791600480820192602092909190829003018186803b158015610e5d57600080fd5b905061195581600a0a610c09886119508b611c3d565b611f77565b979650505050505050565b6082546000906001600160a01b03166119b4576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60835460825460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b158015611a0c57600080fd5b505afa158015611a20573d6000803e3d6000fd5b505050506040513d6020811015611a3657600080fd5b5051611a4457506000611a48565b5060015b919050565b6000611a57611684565b611a6057600080fd5b6001600160a01b03831660009081526085602052604090206002810154849190611abf576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b6000611acb8686611112565b6001600160a01b0387166000908152608560205260409020600281015491925090611afc908363ffffffff611e3016565b60028201558054611b13908763ffffffff611e3016565b8082556002820154604080518981526020810186905280820192909252606082019290925290516001600160a01b0389169133917fed639966d5b0a89f5ac16d6359c7707785de6e51a00f07dd3197e5fbf0a303749181900360800190a35095945050505050565b6000611b85611684565b611b8e57600080fd5b6000611b9983610c1f565b6001600160a01b038416600090815260856020526040902060028101546001820154929350909163ffffffff90811690611bd79083908690611e3016565b6002840155611be586610eed565b50604080518281526020810184905280820186905290516001600160a01b0388169133917fdf7a14785c215a09814aa4ee13a4578dd9842e48d61a2dda15aadd4b98c8007d9181900360600190a35091949350505050565b6001600160a01b03811660009081526085602052604081206002810154839190611c9c576040805162461bcd60e51b815260206004820152601d6024820152600080516020612dcb833981519152604482015290519081900360640190fd5b611ca4612d7a565b506001600160a01b038085166000908152608560209081526040808320815160608101835281548152600182015463ffffffff1681850152600290910154818301526082548251631c2eb17b60e31b815292519195169263e1758bd89260048082019391829003018186803b158015611d1c57600080fd5b505afa158015611d30573d6000803e3d6000fd5b505050506040513d6020811015611d4657600080fd5b50516040808401518451602086810151845163313ce56760e01b81529451959650610c15959394929390926001600160a01b0388169263313ce56792600480840193829003018186803b158015611d9c57600080fd5b505afa158015611db0573d6000803e3d6000fd5b505050506040513d6020811015611dc657600080fd5b5051600a0a610fbe565b611dd8611684565b611de157600080fd5b611dea81611f9b565b50565b600082821115611dfc57600080fd5b50900390565b600082611e1157506000611540565b82820282848281611e1e57fe5b0414611e2957600080fd5b9392505050565b600082820183811015611e2957600080fd5b600080600160811b8610611e5557600080fd5b600080866001607f1b890281611e6757fe5b04905070015bf0a8b1457695355fb8ac404e7a79e3811015611e9357611e8c8161200a565b9150611e9f565b611e9c816123ec565b91505b60008563ffffffff168763ffffffff16840281611eb857fe5b049050600160831b811015611ede57611ed081612496565b607f94509450505050611f0b565b6000611ee98261283a565b9050611efe81607f0360ff1683901c826128ca565b95509350611f0b92505050565b94509492505050565b60006b033b2e3c9fd0803ce8000000611f46611f308585612c67565b60026b033b2e3c9fd0803ce80000005b04612cca565b81611f4d57fe5b049392505050565b6000808211611f6357600080fd5b6000828481611f6e57fe5b04949350505050565b600081611f46611f93856b033b2e3c9fd0803ce8000000612c67565b600285611f40565b6001600160a01b038116611fae57600080fd5b6081546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3608180546001600160a01b0319166001600160a01b0392909216919091179055565b6000808080806fd3094c70f034de4b96ff7d5b6f99fcd88610612053576001607e1b840193506fd3094c70f034de4b96ff7d5b6f99fcd86001607f1b87028161204f57fe5b0495505b6fa45af1e1f40c333b3de1db4dd55f29a78610612096576001607d1b840193506fa45af1e1f40c333b3de1db4dd55f29a76001607f1b87028161209257fe5b0495505b6f910b022db7ae67ce76b441c27035c6a186106120d9576001607c1b840193506f910b022db7ae67ce76b441c27035c6a16001607f1b8702816120d557fe5b0495505b6f88415abbe9a76bead8d00cf112e4d4a8861061211c576001607b1b840193506f88415abbe9a76bead8d00cf112e4d4a86001607f1b87028161211857fe5b0495505b6f84102b00893f64c705e841d5d4064bd3861061215f576001607a1b840193506f84102b00893f64c705e841d5d4064bd36001607f1b87028161215b57fe5b0495505b6f8204055aaef1c8bd5c3259f4822735a286106121a257600160791b840193506f8204055aaef1c8bd5c3259f4822735a26001607f1b87028161219e57fe5b0495505b6f810100ab00222d861931c15e39b44e9986106121e557600160781b840193506f810100ab00222d861931c15e39b44e996001607f1b8702816121e157fe5b0495505b6f808040155aabbbe9451521693554f733861061222857600160771b840193506f808040155aabbbe9451521693554f7336001607f1b87028161222457fe5b0495505b6f7fffffffffffffffffffffffffffffff19860192508291506001607f1b828002049050600160801b838103830204840193506001607f1b8183028161226a57fe5b049150600160811b836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0383028161228e57fe5b04840193506001607f1b818302816122a257fe5b049150600360801b836f99999999999999999999999999999999038302816122c657fe5b04840193506001607f1b818302816122da57fe5b049150600160821b836f92492492492492492492492492492492038302816122fe57fe5b04840193506001607f1b8183028161231257fe5b049150600560801b836f8e38e38e38e38e38e38e38e38e38e38e0383028161233657fe5b04840193506001607f1b8183028161234a57fe5b049150600360811b836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161236e57fe5b04840193506001607f1b8183028161238257fe5b049150600760801b836f89d89d89d89d89d89d89d89d89d89d89038302816123a657fe5b04840193506001607f1b818302816123ba57fe5b049150600160831b836f88888888888888888888888888888888038302816123de57fe5b049390930195945050505050565b600080600160801b831061241c57600061240b6001607f1b8504612d19565b60ff1693841c936001607f1b029150505b6001607f1b83111561246a57607f5b60ff811615612468576001607f1b848002049350600160801b841061245f57600193841c9360ff6000198301161b91909101905b6000190161242b565b505b6f05b9de1d10bf4103d647b0955897ba806f03f80fe03f80fe03f80fe03f80fe03f88202049392505050565b6000670168244fdac780006001607f1b6f0fffffffffffffffffffffffffffffff84168080028290048082028390048083028490049485026710e1b3be415a00009092026705a0913f6b1e000091909102010192909181830204905080664807432bc1800002830192506001607f1b8282028161250f57fe5b04905080660c0135dca0400002830192506001607f1b8282028161252f57fe5b049050806601b707b1cdc00002830192506001607f1b8282028161254f57fe5b049050806536e0f639b80002830192506001607f1b8282028161256e57fe5b04905080650618fee9f80002830192506001607f1b8282028161258d57fe5b04905080649c197dcc0002830192506001607f1b828202816125ab57fe5b04905080640e30dce40002830192506001607f1b828202816125c957fe5b0490508064012ebd130002830192506001607f1b828202816125e757fe5b049050806317499f0002830192506001607f1b8282028161260457fe5b049050806301a9d48002830192506001607f1b8282028161262157fe5b04905080621c638002830192506001607f1b8282028161263d57fe5b049050806201c63802830192506001607f1b8282028161265957fe5b04905080611ab802830192506001607f1b8282028161267457fe5b0490508061017c02830192506001607f1b8282028161268f57fe5b04905080601402830192506001607f1b828202816126a957fe5b6721c3677c82b400009190049384010482016001607f1b019290506001607c1b8516156126fa5770018ebef9eac820ae8682b9793ac6d1e7767001c3d6a24ed82218787d624d3e5eba95f984020492505b6001607d1b851615612730577001368b2fc6f9609fe7aceb46aa619baed470018ebef9eac820ae8682b9793ac6d1e77884020492505b6001607e1b851615612765576fbc5ab1b16779be3575bd8f0520a9f21f7001368b2fc6f9609fe7aceb46aa619baed584020492505b6001607f1b851615612799576f454aaa8efe072e7f6ddbab84b40a55c96fbc5ab1b16779be3575bd8f0520a9f21e84020492505b600160801b8516156127cd576f0960aadc109e7a3bf4578099615711ea6f454aaa8efe072e7f6ddbab84b40a55c584020492505b600160811b851615612800576e2bf84208204f5977f9a8cf01fdce3d6f0960aadc109e7a3bf4578099615711d784020492505b600160821b851615612831576d03c6ab775dd0b95b4cbee7e65d116e2bf84208204f5977f9a8cf01fdc30784020492505b50909392505050565b60006020607f5b8060ff168260010160ff161015612889576000600260ff848401160490508460018260ff166080811061287057fe5b01541061287f57809250612883565b8091505b50612841565b8360018260ff166080811061289a57fe5b0154106128aa579150611a489050565b8360018360ff16608081106128bb57fe5b0154106101da57509050611a48565b60008083905060008090508360ff16858302901c9150816f03442c4e6074a82f1797f72ac000000002810190508360ff16858302901c9150816f0116b96f757c380fb287fd0e4000000002810190508360ff16858302901c9150816e45ae5bdd5f0e03eca1ff439000000002810190508360ff16858302901c9150816e0defabf91302cd95b9ffda5000000002810190508360ff16858302901c9150816e02529ca9832b22439efff9b800000002810190508360ff16858302901c9150816d54f1cf12bd04e516b6da8800000002810190508360ff16858302901c9150816d0a9e39e257a09ca2d6db5100000002810190508360ff16858302901c9150816d012e066e7b839fa050c30900000002810190508360ff16858302901c9150816c1e33d7d926c329a1ad1a80000002810190508360ff16858302901c9150816c02bee513bdb4a6b19b5f80000002810190508360ff16858302901c9150816b3a9316fa79b88eccf2a0000002810190508360ff16858302901c9150816b048177ebe1fa81237520000002810190508360ff16858302901c9150816a5263fe90242dcbacf0000002810190508360ff16858302901c9150816a057e22099c030d9410000002810190508360ff16858302901c9150816957e22099c030d941000002810190508360ff16858302901c91508169052b6b5456997631000002810190508360ff16858302901c915081684985f67696bf74800002810190508360ff16858302901c9150816803dea12ea99e49800002810190508360ff16858302901c9150816731880f2214b6e00002810190508360ff16858302901c91508167025bcff56eb3600002810190508360ff16858302901c915081661b722e10ab100002810190508360ff16858302901c9150816601317c7007700002810190508360ff16858302901c915081650cba84aafa0002810190508360ff16858302901c9150816482573a0a0002810190508360ff16858302901c9150816405035ad90002810190508360ff16858302901c915081632f881b0002810190508360ff16858302901c9150816301b2934002810190508360ff16858302901c915081620efc4002810190508360ff16858302901c915081617fe002810190508360ff16858302901c91508161042002810190508360ff16858302901c915081602102810190508360ff16858302901c915081600102810190508360ff166001901b856f0688589cc0e9505e2f2fee55800000008381612c5b57fe5b04010195945050505050565b6000811580612c8257505080820282828281612c7f57fe5b04145b611540576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611540576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080610100831015612d41575b6001831115612d3c57600192831c9201612d27565b611540565b60805b60ff811615612d7357600160ff82161b8410612d685760ff81169390931c92908117905b60011c607f16612d44565b5092915050565b604051806060016040528060008152602001600063ffffffff16815260200160008152509056fe474420616d6f756e7420697320686967686572207468616e2074686520746f74616c20737570706c795265736572766520746f6b656e206e6f7420696e697469616c697a6564000000474420616d6f756e74206973206c6f776572207468616e2074686520636f6e747269627574696f6e20616d6f756e74a265627a7a723158200bbc2cedbd60c0bcfe652548270f3aa8d63bec7b1bc5e3fde6e73eac1f9bea8e64736f6c63430005100032",
  "sourceMap": "495:17370:25:-;;;147:25:21;;;-1:-1:-1;;147:25:21;171:1;147:25;;;443:64:7;;;-1:-1:-1;;;;;;443:64:7;;;3945:180:25;5:2:-1;;;;30:1;27;20:12;5:2;3945:180:25;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3945:180:25;;;;;;;;;;;-1:-1:-1;;;;;3517:15:21;:54;-1:-1:-1;;;;;3581:15:21;:54;-1:-1:-1;;;;;3645:15:21;:54;-1:-1:-1;;;;;3709:15:21;:54;-1:-1:-1;;;;;3773:15:21;:54;-1:-1:-1;;;;;3837:15:21;:54;-1:-1:-1;;;;;3901:15:21;:54;-1:-1:-1;;;;;3965:15:21;:54;-1:-1:-1;;;;;4029:15:21;:54;-1:-1:-1;;;;;4093:15:21;:54;-1:-1:-1;;;;;4157:15:21;:54;-1:-1:-1;;;;;4221:15:21;:54;-1:-1:-1;;;;;4285:15:21;:54;-1:-1:-1;;;;;4349:15:21;:54;-1:-1:-1;;;;;4413:15:21;:54;-1:-1:-1;;;;;4477:15:21;:54;-1:-1:-1;;;;;4541:15:21;:54;-1:-1:-1;;;;;4605:15:21;:54;-1:-1:-1;;;;;4669:15:21;:54;-1:-1:-1;;;;;4733:15:21;:54;-1:-1:-1;;;;;4797:15:21;:54;-1:-1:-1;;;;;4861:15:21;:54;-1:-1:-1;;;;;4925:15:21;:54;-1:-1:-1;;;;;4989:15:21;:54;-1:-1:-1;;;;;5053:15:21;:54;-1:-1:-1;;;;;5117:15:21;:54;-1:-1:-1;;;;;5181:15:21;:54;-1:-1:-1;;;;;5245:15:21;:54;-1:-1:-1;;;;;5309:15:21;:54;-1:-1:-1;;;;;5373:15:21;:54;-1:-1:-1;;;;;5437:15:21;:54;-1:-1:-1;;;;;5501:54:21;;-1:-1:-1;;;;;5565:15:21;:54;-1:-1:-1;;;;;5629:15:21;:54;-1:-1:-1;;;;;5693:15:21;:54;-1:-1:-1;;;;;5757:15:21;:54;-1:-1:-1;;;;;5821:15:21;:54;-1:-1:-1;;;;;5885:15:21;:54;-1:-1:-1;;;;;5949:15:21;:54;-1:-1:-1;;;;;6013:15:21;:54;-1:-1:-1;;;;;6077:15:21;:54;-1:-1:-1;;;;;6141:15:21;:54;-1:-1:-1;;;;;6205:15:21;:54;-1:-1:-1;;;;;6269:15:21;:54;-1:-1:-1;;;;;6333:15:21;:54;6415:36;6397:15;:54;6479:36;6461:15;:54;6543:36;6525:15;:54;6607:36;6589:15;:54;6671:36;6653:15;:54;6735:36;6717:15;:54;6799:36;6781:15;:54;6863:36;6845:15;:54;6927:36;6909:15;:54;6991:36;6973:15;:54;7055:36;7037:15;:54;7119:36;7101:15;:54;7183:36;7165:15;:54;7247:36;7229:15;:54;7311:36;7293:15;:54;7375:36;7357:15;:54;7439:36;7421:15;:54;7503:36;7485:15;:54;-1:-1:-1;;;;;7549:15:21;:54;7631:36;7613:15;:54;7695:36;7677:15;:54;7759:36;7741:15;:54;7823:36;7805:15;:54;7888:36;7869:16;:55;7953:36;7934:16;:55;8018:36;7999:16;:55;8083:36;8064:16;:55;8148:36;8129:16;:55;8213:36;8194:16;:55;8278:36;8259:16;:55;8343:36;8324:16;:55;8408:36;8389:16;:55;8473:36;8454:16;:55;8538:36;8519:16;:55;8603:36;8584:16;:55;8668:36;8649:16;:55;8733:36;8714:16;:55;8798:36;8779:16;:55;8863:36;8844:16;:55;8928:36;8909:16;:55;8993:36;8974:16;:55;9058:36;9039:16;:55;9123:36;9104:16;:55;9188:36;9169:16;:55;9253:36;9234:16;:55;9318:36;9299:16;:55;9383:36;9364:16;:55;9448:36;9429:16;:55;9513:36;9494:16;:55;9578:36;9559:16;:55;9643:36;9624:16;:55;515:6:77;:19;;-1:-1:-1;;;;;;515:19:77;524:10;515:19;;;;;549:40;;3945:180:25;;;;;;;;-1:-1:-1;;;;;582:6:77;;;;-1:-1:-1;;549:40:77;;-1:-1:-1;;549:40:77;688:6:7;:16;;-1:-1:-1;;;;;;688:16:7;-1:-1:-1;;;;;688:16:7;;;;;;;;;;;719:6;:19;715:98;;787:6;;;;;;;;;-1:-1:-1;;;;;787:6:7;-1:-1:-1;;;;;787:12:7;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;787:14:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;787:14:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;787:14:7;754:10;:48;;-1:-1:-1;;;;;;754:48:7;-1:-1:-1;;;;;754:48:7;;;;;;;;;715:98;-1:-1:-1;4100:18:25;4105:4;4111:6;-1:-1:-1;;;;;4100:4:25;:18;:::i;:::-;4071:26;:47;-1:-1:-1;495:17370:25;;-1:-1:-1;;495:17370:25;2069:118:0;2128:9;2179:1;2153:23;2157:11;2161:1;1683:6;-1:-1:-1;;;;;2157:3:0;:11;:::i;:::-;2174:1;2170;:5;-1:-1:-1;;;;;2153:3:0;:23;:::i;:::-;:27;;;;;;;2069:118;-1:-1:-1;;;2069:118:0:o;1025:149::-;1083:9;1112:6;;;:30;;-1:-1:-1;;1127:5:0;;;1141:1;1136;1127:5;1136:1;1122:15;;;;;:20;1112:30;1104:63;;;;;-1:-1:-1;;;1104:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1025:149;;;;:::o;744:135::-;836:5;;;831:16;;;;823:49;;;;;-1:-1:-1;;;823:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;495:17370:25;;;;;;;",
  "deployedSourceMap": "495:17370:25:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;495:17370:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1698:143:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1698:143:7;-1:-1:-1;;;;;1698:143:7;;:::i;:::-;;11620:1154:25;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11620:1154:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15682:902:21;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;15682:902:21;;;;;;;;;;;;;;;;;;;:::i;1987:102:7:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;10315:922:21;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;10315:922:21;;;;;;;;;;;;;;;;;;;:::i;6298:597:25:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6298:597:25;-1:-1:-1;;;;;6298:597:25;;:::i;:::-;;;;;;;;;;;;;;;;;;;16021:1105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16021:1105:25;-1:-1:-1;;;;;16021:1105:25;;:::i;7104:442::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7104:442:25;-1:-1:-1;;;;;7104:442:25;;:::i;11857:1089:21:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;11857:1089:21;;;;;;;;;;;;;;;;;;;:::i;5703:346:25:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;5703:346:25;;-1:-1:-1;;;;;5703:346:25;;;;;;;;;;;;;;;;;;:::i;147:25:21:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7862:425:25;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7862:425:25;;;;;;;;:::i;36257:500:21:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;36257:500:21;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8601:416:25:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8601:416:25;;;;;;;;:::i;10378:731::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10378:731:25;;;;;;;;:::i;3627:41::-;;;:::i;1347:137:77:-;;;:::i;14822:773:25:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14822:773:25;;;;;;;;:::i;13863:1149:21:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;13863:1149:21;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1162:53:25:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1162:53:25;-1:-1:-1;;;;;1162:53:25;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;659:77:77;;;:::i;:::-;;;;-1:-1:-1;;;;;659:77:77;;;;;;;;;;;;;;979:90;;;:::i;4769:291:25:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4769:291:25;;;;;;;:::i;17257:1069:21:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;17257:1069:21;;;;;;;;;;;;;;;;;;;:::i;14014:523:25:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14014:523:25;;;;;;;;:::i;2235:262:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2235:262:7;-1:-1:-1;;;;;2235:262:7;;:::i;9386:638:25:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9386:638:25;;;;;;;;:::i;17350:513::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17350:513:25;-1:-1:-1;;;;;17350:513:25;;:::i;12956:501::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12956:501:25;-1:-1:-1;;;;;12956:501:25;;:::i;1655:107:77:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:77;-1:-1:-1;;;;;1655:107:77;;:::i;1698:143:7:-;863:9:77;:7;:9::i;:::-;855:18;;;;;;1760:6:7;:16;;-1:-1:-1;;;;;;1760:16:7;-1:-1:-1;;;;;1760:16:7;;;;;;;;;;;1819:14;;;-1:-1:-1;;;1819:14:7;;;;:6;;;;;:12;;:14;;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;1819:14:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1819:14:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1819:14:7;1786:10;:48;;-1:-1:-1;;;;;;1786:48:7;-1:-1:-1;;;;;1786:48:7;;;;;;;;;-1:-1:-1;1698:143:7:o;11620:1154:25:-;11794:7;863:9:77;:7;:9::i;:::-;855:18;;;;;;-1:-1:-1;;;;;4210:30:25;;4180:27;4210:30;;;:13;:30;;;;;4258:15;;;;11777:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;11847:21;11834:9;:34;;11813:128;;;;-1:-1:-1;;;11813:128:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11981:30:25;;11951:27;11981:30;;;:13;:30;;;;;12029:15;;;;:27;-1:-1:-1;12021:81:25;;;;-1:-1:-1;;;12021:81:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12201:31;12235:36;:9;12249:21;12235:36;:13;:36;:::i;:::-;12201:70;;12330:19;12352:43;12363:6;12371:23;12352:10;:43::i;:::-;12423:15;;;;12330:65;;-1:-1:-1;12423:30:25;;12443:9;12423:30;:19;:30;:::i;:::-;12405:15;;;:48;12486:20;;:37;;12511:11;12486:37;:24;:37;:::i;:::-;12463:60;;;12680:15;;;;12538:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12538:201:25;;;12567:10;;12538:201;;;;;;;;;12756:11;11620:1154;-1:-1:-1;;;;;;;;11620:1154:25:o;15682:902:21:-;15847:7;15923:1;15913:7;:11;:50;;;;;15962:1;15944:15;:19;15913:50;:85;;;;;15997:1;15983:11;:15;;;15913:85;:133;;;;-1:-1:-1;16033:13:21;16018:28;;;;;15913:133;15892:164;;;;;;16108:12;16104:26;;-1:-1:-1;16129:1:21;16122:8;;16104:26;16195:24;;;253:7;16195:24;16191:97;;;16277:7;16272:1;16241:28;:7;16253:15;16241:28;:11;:28;:::i;:::-;:32;16240:44;;;;;;16287:1;16240:48;16233:55;;;;16191:97;16299:14;;;16364:20;:7;16376;16364:20;:11;:20;:::i;:::-;16348:36;;16416:45;16422:5;16429:7;253;16449:11;16416:5;:45::i;:::-;16394:67;;-1:-1:-1;16394:67:21;-1:-1:-1;16471:12:21;16487:46;;;16518:1;16488:27;:15;16394:67;16488:27;:19;:27;:::i;:::-;:31;16487:46;;16555:22;;;16537:1;16555:22;;-1:-1:-1;;;;;15682:902:21;;;;;;;:::o;1987:102:7:-;2032:4;2055:27;2076:4;2055:12;:27::i;:::-;2048:34;;1987:102;:::o;10315:922:21:-;10495:7;10571:1;10561:7;:11;:50;;;;;10610:1;10592:15;:19;10561:50;:87;;;;;10647:1;10631:13;:17;;;10561:87;:133;;;;-1:-1:-1;253:7:21;10668:26;;;;;10561:133;10540:164;;;;;;10764:19;10760:33;;-1:-1:-1;10792:1:21;10785:8;;10760:33;10852:26;;;253:7;10852:26;10848:96;;;10929:15;10899:27;:7;10911:14;10899:27;:11;:27;:::i;:::-;:45;;;;;;10892:52;;;;10848:96;10955:14;;;11020:35;:14;11039:15;11020:35;:18;:35;:::i;:::-;11004:51;;11087:55;11093:5;11100:15;11117:13;253:7;11087:5;:55::i;:::-;11065:77;;-1:-1:-1;11065:77:21;-1:-1:-1;11152:12:21;11167:32;;;:19;:7;11065:77;11167:19;:11;:19;:::i;:::-;:32;;11216:14;;;;;10315:922;-1:-1:-1;;;;;;;;10315:922:21:o;6298:597:25:-;-1:-1:-1;;;;;4210:30:25;;6423:6;4210:30;;;:13;:30;;;;;4258:15;;;;6398:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;6445:32;;:::i;:::-;-1:-1:-1;;;;;;6480:30:25;;;;;;:13;:30;;;;;;;;;6445:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6574:10;6570:52;;-1:-1:-1;6608:3:25;6570:52;6674:174;6843:4;6674:143;6700:24;:14;;;;;6843:4;;6700:18;:24;:::i;:::-;6773:26;;6674:4;:143::i;:::-;:168;:174;:168;:174;:::i;:::-;6631:257;6298:597;-1:-1:-1;;;;;;6298:597:25:o;16021:1105::-;-1:-1:-1;;;;;4210:30:25;;16144:7;4210:30;;;:13;:30;;;;;4258:15;;;;16119:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;16167:32;;:::i;:::-;-1:-1:-1;;;;;;16202:30:25;;;;;;:13;:30;;;;;;;;16167:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16267:32;16224:6;16267:24;:32::i;:::-;16242:57;;16330:27;16381:58;16419:6;-1:-1:-1;;;;;16397:39:25;;:41;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16397:41:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16397:41:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16397:41:25;16389:2;;16381:58;;;:15;:58;:::i;:::-;16330:119;-1:-1:-1;16491:13:25;16507:125;16525:34;:24;;;;;16554:4;;16525:28;:34;:::i;:::-;16573:49;16602:19;16598:2;:23;16573:20;16586:6;16573:12;:20::i;:::-;:24;:49;:24;:49;:::i;:::-;16507:4;:125::i;:::-;16491:141;;16695:21;16738:6;;;;;;;;;-1:-1:-1;;;;;16738:6:25;-1:-1:-1;;;;;16738:18:25;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16738:20:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16738:20:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16738:20:25;16819:21;;;-1:-1:-1;;;16819:21:25;;;;16738:20;;-1:-1:-1;16770:22:25;;16795:47;;-1:-1:-1;;;;;16819:19:25;;;;;:21;;;;;16738:20;;16819:21;;;;;;;;:19;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;16819:21:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16819:21:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16819:21:25;16803:2;;16795:47;:15;:47;:::i;:::-;16770:72;;16852:14;16869:174;17028:14;17024:2;:18;16869:137;16887:55;16922:19;16918:2;:23;16887:12;:26;;;:30;;:55;;;;:::i;:::-;16991:5;16869:4;:137::i;:174::-;16852:191;;17086:33;17097:12;:21;;;17086:6;:10;;:33;;;;:::i;:::-;17079:40;16021:1105;-1:-1:-1;;;;;;;;;;;16021:1105:25:o;7104:442::-;7228:6;863:9:77;:7;:9::i;:::-;855:18;;;;;;-1:-1:-1;;;;;4210:30:25;;4180:27;4210:30;;;:13;:30;;;;;4258:15;;;;7203:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;-1:-1:-1;;;;;7286:30:25;;7250:33;7286:30;;;:13;:30;;;;;7341:25;;;;;;7380:10;7376:52;;-1:-1:-1;7414:3:25;7376:52;7465:32;7490:6;7465:24;:32::i;:::-;7437:25;;;;;:60;;-1:-1:-1;;7437:60:25;;;;;;;;;;7514:25;;;;7104:442;-1:-1:-1;;;;;7104:442:25:o;11857:1089:21:-;12030:7;12106:1;12096:7;:11;:50;;;;;12145:1;12127:15;:19;12096:50;:87;;;;;12182:1;12166:13;:17;;;12096:87;:133;;;;-1:-1:-1;253:7:21;12203:26;;;;;12096:133;:175;;;;;12264:7;12249:11;:22;;12096:175;12075:206;;;;;;12338:16;12334:30;;-1:-1:-1;12363:1:21;12356:8;;12334:30;12448:7;12433:11;:22;12429:50;;;-1:-1:-1;12464:15:21;12457:22;;12429:50;12538:26;;;253:7;12538:26;12534:81;;;12608:7;12573:32;:15;12593:11;12573:32;:19;:32;:::i;12534:81::-;12626:14;;12691:21;;;12744:47;12691:7;:21;253:7;12777:13;12744:5;:47::i;:::-;12722:69;;-1:-1:-1;12722:69:21;-1:-1:-1;12801:13:21;12817:27;:15;12722:69;12817:27;:19;:27;:::i;:::-;12801:43;-1:-1:-1;12870:28:21;;;;;;12933:6;12916:13;;;12933:6;12915:24;;;;;;11857:1089;-1:-1:-1;;;;;;;;;;11857:1089:21:o;5703:346:25:-;863:9:77;:7;:9::i;:::-;855:18;;;;;;5903:139:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5870:30:25;;;;-1:-1:-1;5870:30:25;;;:13;:30;;;;;:172;;;;;;;;;;;-1:-1:-1;;5870:172:25;;;;;;;;;;;;;;;5703:346::o;147:25:21:-;;;;;;:::o;7862:425:25:-;-1:-1:-1;;;;;4210:30:25;;7994:7;4210:30;;;:13;:30;;;;;4258:15;;;;7969:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;8017:26;;:::i;:::-;-1:-1:-1;;;;;;8046:30:25;;;;;;:13;:30;;;;;;;;;8017:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8105:175;;8017:59;;;8254:12;8105:23;:175::i;36257:500:21:-;36496:7;36534:216;36579:21;36618:20;36656:19;36693:18;36729:7;36534:27;:216::i;:::-;36515:235;;36257:500;;;;;;;;:::o;8601:416:25:-;-1:-1:-1;;;;;4210:30:25;;8731:7;4210:30;;;:13;:30;;;;;4258:15;;;;8706:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;8754:26;;:::i;:::-;-1:-1:-1;;;;;;8783:30:25;;;;;;:13;:30;;;;;;;;;8754:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8842:168;;8754:59;;;8987:9;8842:19;:168::i;10378:731::-;10507:7;863:9:77;:7;:9::i;:::-;855:18;;;;;;-1:-1:-1;;;;;4210:30:25;;4180:27;4210:30;;;:13;:30;;;;;4258:15;;;;10482:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;-1:-1:-1;;;;;10560:30:25;;10530:27;10560:30;;;:13;:30;;;;;10608:15;;;;:27;-1:-1:-1;10600:81:25;;;;-1:-1:-1;;;10600:81:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10691:19;10713:29;10724:6;10732:9;10713:10;:29::i;:::-;10770:15;;;;10691:51;;-1:-1:-1;10770:30:25;;10790:9;10770:30;:19;:30;:::i;:::-;10752:15;;;:48;10833:20;;:37;;10858:11;10833:37;:24;:37;:::i;:::-;10810:60;;;11015:15;;;;10885:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10885:189:25;;;10914:10;;10885:189;;;;;;;;;11091:11;10378:731;-1:-1:-1;;;;;;10378:731:25:o;3627:41::-;;;;:::o;1347:137:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1429:6;;1408:40;;1445:1;;-1:-1:-1;;;;;1429:6:77;;1408:40;;1445:1;;1408:40;1458:6;:19;;-1:-1:-1;;;;;;1458:19:77;;;1347:137::o;14822:773:25:-;14933:7;863:9:77;:7;:9::i;:::-;855:18;;;;;;14960:20:25;14956:59;;-1:-1:-1;15003:1:25;14996:8;;14956:59;15024:14;15041:46;15063:6;15071:15;15041:21;:46::i;:::-;-1:-1:-1;;;;;15133:30:25;;15097:33;15133:30;;;:13;:30;;;;;15192:21;;;;15248:26;;15024:63;;-1:-1:-1;15133:30:25;;15308:20;15192:21;15024:63;15308:20;:12;:20;:::i;:::-;15284:21;;;:44;15367:35;:14;15386:15;15367:35;:18;:35;:::i;:::-;15338:64;;15417:148;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15417:148:25;;;15445:10;;15417:148;;;;;;;;;-1:-1:-1;15582:6:25;;-1:-1:-1;;;883:1:77;14822:773:25;;;;:::o;13863:1149:21:-;14090:7;14178:1;14156:19;:23;:64;;;;;14219:1;14199:17;:21;;;14156:64;:114;;;;-1:-1:-1;253:7:21;14240:30;;;;;14156:114;:155;;;;;14310:1;14290:17;:21;14156:155;:194;;;;;14349:1;14331:15;:19;;;14156:194;:242;;;;-1:-1:-1;253:7:21;14370:28;;;;;14156:242;14135:273;;;;;;14485:15;14464:36;;:17;:36;;;14460:126;;;14554:32;:19;14578:7;14554:32;:23;:32;:::i;:::-;14521:30;:17;14543:7;14521:30;:21;:30;:::i;:::-;:65;;;;;;14514:72;;;;14460:126;14597:14;;;14662:32;:19;14686:7;14662:32;:23;:32;:::i;:::-;14646:48;;14726:127;14745:5;14764:19;14797:17;14828:15;14726:5;:127::i;:::-;14704:149;;-1:-1:-1;14704:149:21;-1:-1:-1;14863:13:21;14879:29;:17;14704:149;14879:29;:21;:29;:::i;:::-;14863:45;-1:-1:-1;14934:30:21;;;;;;14999:6;14982:13;;;14999:6;14981:24;;;;;;13863:1149;-1:-1:-1;;;;;;;;;;;13863:1149:21:o;1162:53:25:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;659:77:77:-;723:6;;-1:-1:-1;;;;;723:6:77;659:77;:::o;979:90::-;1056:6;;-1:-1:-1;;;;;1056:6:77;1042:10;:20;;979:90::o;4769:291:25:-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4903:1:25;4894:6;:10;4886:50;;;;;-1:-1:-1;;;4886:50:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4975:18;4980:4;4986:6;4975:4;:18::i;:::-;4946:26;:47;5008:45;;;;;;;;;;;;;;5028:10;;5008:45;;;;;;;;4769:291;;:::o;17257:1069:21:-;17429:7;17505:1;17495:7;:11;:50;;;;;17544:1;17526:15;:19;17495:50;:85;;;;;17579:1;17565:11;:15;;;17495:85;:133;;;;-1:-1:-1;17615:13:21;17600:28;;;;;17495:133;:171;;;;;17659:7;17648;:18;;17495:171;17474:202;;;;;;17728:12;17724:26;;-1:-1:-1;17749:1:21;17742:8;;17724:26;17834:7;17823;:18;17819:46;;;-1:-1:-1;17850:15:21;17843:22;;17819:46;17930:24;;;253:7;17930:24;17926:75;;;17994:7;17963:28;:7;17975:15;17963:28;:11;:28;:::i;14014:523:25:-;-1:-1:-1;;;;;4210:30:25;;14161:7;4210:30;;;:13;:30;;;;;4258:15;;;;14136:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;14227:6;;:20;;;-1:-1:-1;;;14227:20:25;;;;14184:21;;-1:-1:-1;;;;;14227:6:25;;:18;;:20;;;;;;;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;14227:20:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14227:20:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14227:20:25;14306:21;;;-1:-1:-1;;;14306:21:25;;;;14227:20;;-1:-1:-1;14259:20:25;;14282:47;;-1:-1:-1;;;;;14306:19:25;;;;;:21;;;;;14227:20;;14306:21;;;;;;;;:19;:21;;;5:2:-1;;;;30:1;27;20:12;14282:47:25;14259:70;;14465:65;14517:12;14513:2;:16;14465:43;14470:15;14487:20;14500:6;14487:12;:20::i;:::-;14465:4;:43::i;:65::-;14458:72;14014:523;-1:-1:-1;;;;;;;14014:523:25:o;2235:262:7:-;2318:6;;2294:4;;-1:-1:-1;;;;;2318:6:7;2310:49;;;;;-1:-1:-1;;;2310:49:7;;;;;;;;;;;;-1:-1:-1;;;2310:49:7;;;;;;;;;;;;;;;2376:10;;2422:6;;2376:54;;;-1:-1:-1;;;2376:54:7;;-1:-1:-1;;;;;2376:54:7;;;;;;;2422:6;;;2376:54;;;;;;:10;;;;;:29;;:54;;;;;;;;;;;;;;:10;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;2376:54:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2376:54:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2376:54:7;2370:100;;-1:-1:-1;2454:5:7;2447:12;;2370:100;-1:-1:-1;2486:4:7;2235:262;;;;:::o;9386:638:25:-;9517:7;863:9:77;:7;:9::i;:::-;855:18;;;;;;-1:-1:-1;;;;;4210:30:25;;4180:27;4210:30;;;:13;:30;;;;;4258:15;;;;9492:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;9540:16;9559:31;9569:6;9577:12;9559:9;:31::i;:::-;-1:-1:-1;;;;;9630:30:25;;9600:27;9630:30;;;:13;:30;;;;;9688:15;;;;9540:50;;-1:-1:-1;9630:30:25;9688:29;;9540:50;9688:29;:19;:29;:::i;:::-;9670:15;;;:47;9750:20;;:38;;9775:12;9750:38;:24;:38;:::i;:::-;9727:61;;;9933:15;;;;9803:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9803:189:25;;;9832:10;;9803:189;;;;;;;;;-1:-1:-1;10009:8:25;9386:638;-1:-1:-1;;;;;9386:638:25:o;17350:513::-;17413:7;863:9:77;:7;:9::i;:::-;855:18;;;;;;17432:14:25;17449:30;17472:6;17449:22;:30::i;:::-;-1:-1:-1;;;;;17525:30:25;;17489:33;17525:30;;;:13;:30;;;;;17584:21;;;;17631:25;;;;17432:47;;-1:-1:-1;17525:30:25;;17631:25;;;;;17690:20;;17584:21;;17432:47;;17690:12;:20;:::i;:::-;17666:21;;;:44;17720:26;17739:6;17720:18;:26::i;:::-;-1:-1:-1;17761:72:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17761:72:25;;;17780:10;;17761:72;;;;;;;;;-1:-1:-1;17850:6:25;;17350:513;-1:-1:-1;;;;17350:513:25:o;12956:501::-;-1:-1:-1;;;;;4210:30:25;;13069:7;4210:30;;;:13;:30;;;;;4258:15;;;;13044:6;;4210:30;4250:61;;;;;-1:-1:-1;;;4250:61:25;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4250:61:25;;;;;;;;;;;;;;;13092:26;;:::i;:::-;-1:-1:-1;;;;;;13121:30:25;;;;;;;:13;:30;;;;;;;;13092:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13204:6;;:20;;-1:-1:-1;;;13204:20:25;;;;13092:59;;13204:6;;:18;;:20;;;;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;13204:20:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13204:20:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13204:20:25;13292:15;;;;;13325:20;;13204;13363:19;;;;13413:21;;-1:-1:-1;;;13413:21:25;;;;13204:20;;-1:-1:-1;13255:195:25;;13292:15;;13325:20;;13363:19;;-1:-1:-1;;;;;13413:19:25;;;;;:21;;;;;;;;;;:19;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;13413:21:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13413:21:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13413:21:25;13401:2;:34;13255:19;:195::i;1655:107:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;:::-;1655:107;:::o;1205:145:76:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:76;;;1205:145::o;229:421::-;287:7;527:6;523:45;;-1:-1:-1;556:1:76;549:8;;523:45;590:5;;;594:1;590;:5;:1;613:5;;;;;:10;605:19;;;;;;642:1;229:421;-1:-1:-1;;;229:421:76:o;1431:145::-;1489:7;1520:5;;;1543:6;;;;1535:15;;;;;19881:843:21;20017:7;20026:5;-1:-1:-1;;;20051:6:21;:16;20043:25;;;;;;20079:15;20104:12;20140:6;-1:-1:-1;;;20120:6:21;:16;20119:27;;;;;;20104:42;;1041:35;20160:4;:22;20156:136;;;20208:16;20219:4;20208:10;:16::i;:::-;20198:26;;20156:136;;;20265:16;20276:4;20265:10;:16::i;:::-;20255:26;;20156:136;20302:23;20348:5;20328:25;;20339:5;20329:15;;:7;:15;20328:25;;;;;;20302:51;;-1:-1:-1;;;20367:15:21;:33;20363:355;;;20424:27;20435:15;20424:10;:27::i;:::-;352:3;20416:51;;;;;;;;;20363:355;20498:15;20516:42;20542:15;20516:25;:42::i;:::-;20498:60;;20597:69;20644:9;352:3;20628:25;20608:46;;:15;:46;;20656:9;20597:10;:69::i;:::-;20572:135;-1:-1:-1;20684:9:21;-1:-1:-1;20572:135:21;;-1:-1:-1;;;20572:135:21;19881:843;;;;;;;;:::o;1821:120:0:-;1880:9;1683:6;1905:23;1909:9;1913:1;1916;1909:3;:9::i;:::-;1926:1;1683:6;1920:7;;1905:3;:23::i;:::-;:29;;;;;;;1821:120;-1:-1:-1;;;1821:120:0:o;778:296:76:-;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;;778:296;-1:-1:-1;;;;778:296:76:o;2069:118:0:-;2128:9;2179:1;2153:23;2157:11;2161:1;1683:6;2157:3;:11::i;:::-;2174:1;2170;:5;;1906:183:77;-1:-1:-1;;;;;1979:22:77;;1971:31;;;;;;2038:6;;2017:38;;-1:-1:-1;;;;;2017:38:77;;;;2038:6;;2017:38;;2038:6;;2017:38;2065:6;:17;;-1:-1:-1;;;;;;2065:17:77;-1:-1:-1;;;;;2065:17:77;;;;;;;;;;1906:183::o;28504:3317:21:-;28558:7;;;;;28670:34;28665:39;;28661:179;;-1:-1:-1;;;28720:41:21;;;;28795:34;-1:-1:-1;;;28780:1:21;:11;28779:50;;;;;;28775:54;;28661:179;28873:34;28868:1;:39;28864:179;;-1:-1:-1;;;28923:41:21;;;;28998:34;-1:-1:-1;;;28983:1:21;:11;28982:50;;;;;;28978:54;;28864:179;29076:34;29071:1;:39;29067:179;;-1:-1:-1;;;29126:41:21;;;;29201:34;-1:-1:-1;;;29186:1:21;:11;29185:50;;;;;;29181:54;;29067:179;29279:34;29274:1;:39;29270:179;;-1:-1:-1;;;29329:41:21;;;;29404:34;-1:-1:-1;;;29389:1:21;:11;29388:50;;;;;;29384:54;;29270:179;29482:34;29477:1;:39;29473:179;;-1:-1:-1;;;29532:41:21;;;;29607:34;-1:-1:-1;;;29592:1:21;:11;29591:50;;;;;;29587:54;;29473:179;29685:34;29680:1;:39;29676:179;;-1:-1:-1;;;29735:41:21;;;;29810:34;-1:-1:-1;;;29795:1:21;:11;29794:50;;;;;;29790:54;;29676:179;29888:34;29883:1;:39;29879:179;;-1:-1:-1;;;29938:41:21;;;;30013:34;-1:-1:-1;;;29998:1:21;:11;29997:50;;;;;;29993:54;;29879:179;30091:34;30086:1;:39;30082:179;;-1:-1:-1;;;30141:41:21;;;;30216:34;-1:-1:-1;;;30201:1:21;:11;30200:50;;;;;;30196:54;;30082:179;-1:-1:-1;;30294:11:21;;;-1:-1:-1;30294:11:21;;-1:-1:-1;;;;30320:5:21;;;30319:17;;-1:-1:-1;;;;30371:39:21;;;30366:45;;30365:97;30346:116;;;;-1:-1:-1;;;30481:1:21;30477;:5;30476:17;;;;;;30472:21;;-1:-1:-1;;;30595:1:21;30557:35;:39;30552:1;:45;30551:97;;;;;;30532:116;;;;-1:-1:-1;;;30667:1:21;30663;:5;30662:17;;;;;;30658:21;;-1:-1:-1;;;30781:1:21;30743:35;:39;30738:1;:45;30737:97;;;;;;30718:116;;;;-1:-1:-1;;;30853:1:21;30849;:5;30848:17;;;;;;30844:21;;-1:-1:-1;;;30967:1:21;30929:35;:39;30924:1;:45;30923:97;;;;;;30904:116;;;;-1:-1:-1;;;31039:1:21;31035;:5;31034:17;;;;;;31030:21;;-1:-1:-1;;;31153:1:21;31115:35;:39;31110:1;:45;31109:97;;;;;;31090:116;;;;-1:-1:-1;;;31225:1:21;31221;:5;31220:17;;;;;;31216:21;;-1:-1:-1;;;31339:1:21;31301:35;:39;31296:1;:45;31295:97;;;;;;31276:116;;;;-1:-1:-1;;;31411:1:21;31407;:5;31406:17;;;;;;31402:21;;-1:-1:-1;;;31525:1:21;31487:35;:39;31482:1;:45;31481:97;;;;;;31462:116;;;;-1:-1:-1;;;31597:1:21;31593;:5;31592:17;;;;;;31588:21;;-1:-1:-1;;;31711:1:21;31673:35;:39;31668:1;:45;31667:97;;;;;;31648:116;;;;;28504:3317;-1:-1:-1;;;;;28504:3317:21:o;20894:803::-;20948:7;;-1:-1:-1;;;21088:12:21;;21084:152;;21116:11;21130:22;-1:-1:-1;;;21140:1:21;:11;21130:9;:22::i;:::-;21166:11;;;;;;-1:-1:-1;;;21210:15:21;;-1:-1:-1;;21084:152:21;-1:-1:-1;;;21341:1:21;:11;21337:297;;;352:3;21368:256;21398:5;;;;21368:256;;-1:-1:-1;;;21433:5:21;;;21432:17;21428:21;;-1:-1:-1;;;21488:1:21;:12;21484:126;;21530:1;21524:7;;;;21577:14;-1:-1:-1;;21585:5:21;;21577:14;;21570:21;;;;;21484:126;-1:-1:-1;;21405:3:21;21368:256;;;;21337:297;854:33;772;21652:19;;21651:39;;20894:803;-1:-1:-1;;;20894:803:21:o;32497:3691::-;32551:7;32956:18;-1:-1:-1;;;32643:38:21;;;32727:5;;;32726:17;;;32823:5;;;32822:17;;;32919:5;;;32918:17;;;32952:22;;;32764:18;32760:22;;;32860:18;32856:22;;;;32849:29;32945;;32643:38;;33015:5;;;33014:17;33010:21;;33048:1;33052:18;33048:22;33041:29;;;;-1:-1:-1;;;33115:1:21;33111;:5;33110:17;;;;;;33106:21;;33144:1;33148:18;33144:22;33137:29;;;;-1:-1:-1;;;33211:1:21;33207;:5;33206:17;;;;;;33202:21;;33240:1;33244:18;33240:22;33233:29;;;;-1:-1:-1;;;33307:1:21;33303;:5;33302:17;;;;;;33298:21;;33336:1;33340:18;33336:22;33329:29;;;;-1:-1:-1;;;33403:1:21;33399;:5;33398:17;;;;;;33394:21;;33432:1;33436:18;33432:22;33425:29;;;;-1:-1:-1;;;33499:1:21;33495;:5;33494:17;;;;;;33490:21;;33528:1;33532:18;33528:22;33521:29;;;;-1:-1:-1;;;33595:1:21;33591;:5;33590:17;;;;;;33586:21;;33624:1;33628:18;33624:22;33617:29;;;;-1:-1:-1;;;33691:1:21;33687;:5;33686:17;;;;;;33682:21;;33720:1;33724:18;33720:22;33713:29;;;;-1:-1:-1;;;33787:1:21;33783;:5;33782:17;;;;;;33778:21;;33816:1;33820:18;33816:22;33809:29;;;;-1:-1:-1;;;33883:1:21;33879;:5;33878:17;;;;;;33874:21;;33912:1;33916:18;33912:22;33905:29;;;;-1:-1:-1;;;33979:1:21;33975;:5;33974:17;;;;;;33970:21;;34008:1;34012:18;34008:22;34001:29;;;;-1:-1:-1;;;34075:1:21;34071;:5;34070:17;;;;;;34066:21;;34104:1;34108:18;34104:22;34097:29;;;;-1:-1:-1;;;34171:1:21;34167;:5;34166:17;;;;;;34162:21;;34200:1;34204:18;34200:22;34193:29;;;;-1:-1:-1;;;34267:1:21;34263;:5;34262:17;;;;;;34258:21;;34296:1;34300:18;34296:22;34289:29;;;;-1:-1:-1;;;34363:1:21;34359;:5;34358:17;;;;;;34354:21;;34392:1;34396:18;34392:22;34385:29;;;;-1:-1:-1;;;34459:1:21;34455;:5;34454:17;;;;;34558:18;34454:17;;;34481:29;;;34552:24;:28;;-1:-1:-1;;;34552:38:21;;34454:17;-1:-1:-1;;;;34656:39:21;;34655:46;34651:183;;34799:35;34744;34738:41;;34737:97;34715:119;;34651:183;-1:-1:-1;;;34873:39:21;;34872:46;34868:183;;35016:35;34961;34955:41;;34954:97;34932:119;;34868:183;-1:-1:-1;;;35090:39:21;;35089:46;35085:183;;35233:35;35178;35172:41;;35171:97;35149:119;;35085:183;-1:-1:-1;;;35307:39:21;;35306:46;35302:183;;35450:35;35395;35389:41;;35388:97;35366:119;;35302:183;-1:-1:-1;;;35524:39:21;;35523:46;35519:183;;35667:35;35612;35606:41;;35605:97;35583:119;;35519:183;-1:-1:-1;;;35741:39:21;;35740:46;35736:183;;35884:35;35829;35823:41;;35822:97;35800:119;;35736:183;-1:-1:-1;;;35958:39:21;;35957:46;35953:183;;36101:35;36046;36040:41;;36039:97;36017:119;;35953:183;-1:-1:-1;36178:3:21;;32497:3691;-1:-1:-1;;;32497:3691:21:o;22697:445::-;22767:5;305:2;352:3;22853:147;22869:2;22860:11;;:2;22865:1;22860:6;:11;;;22853:147;;;22887:9;22911:1;22899:13;22900:7;;;22899:13;;22887:25;;22950:2;22930:11;22942:3;22930:16;;;;;;;;;;;:22;22926:63;;22959:3;22954:8;;22926:63;;;22986:3;22981:8;;22926:63;22853:147;;;;23033:2;23014:11;23026:2;23014:15;;;;;;;;;;;:21;23010:36;;23044:2;-1:-1:-1;23037:9:21;;-1:-1:-1;23037:9:21;23010:36;23079:2;23060:11;23072:2;23060:15;;;;;;;;;;;:21;23056:36;;-1:-1:-1;23090:2:21;-1:-1:-1;23083:9:21;;23701:4082;23774:7;23793:10;23806:2;23793:15;;23818:11;23832:1;23818:15;;23862:10;23849:23;;23855:2;23850;:7;23849:23;;23844:28;;23889:2;23894:33;23889:38;23882:45;;;;23981:10;23968:23;;23974:2;23969;:7;23968:23;;23963:28;;24008:2;24013:33;24008:38;24001:45;;;;24100:10;24087:23;;24093:2;24088;:7;24087:23;;24082:28;;24127:2;24132:33;24127:38;24120:45;;;;24219:10;24206:23;;24212:2;24207;:7;24206:23;;24201:28;;24246:2;24251:33;24246:38;24239:45;;;;24338:10;24325:23;;24331:2;24326;:7;24325:23;;24320:28;;24365:2;24370:33;24365:38;24358:45;;;;24457:10;24444:23;;24450:2;24445;:7;24444:23;;24439:28;;24484:2;24489:33;24484:38;24477:45;;;;24576:10;24563:23;;24569:2;24564;:7;24563:23;;24558:28;;24603:2;24608:33;24603:38;24596:45;;;;24695:10;24682:23;;24688:2;24683;:7;24682:23;;24677:28;;24722:2;24727:33;24722:38;24715:45;;;;24814:10;24801:23;;24807:2;24802;:7;24801:23;;24796:28;;24841:2;24846:33;24841:38;24834:45;;;;24933:10;24920:23;;24926:2;24921;:7;24920:23;;24915:28;;24960:2;24965:33;24960:38;24953:45;;;;25052:10;25039:23;;25045:2;25040;:7;25039:23;;25034:28;;25079:2;25084:33;25079:38;25072:45;;;;25171:10;25158:23;;25164:2;25159;:7;25158:23;;25153:28;;25198:2;25203:33;25198:38;25191:45;;;;25290:10;25277:23;;25283:2;25278;:7;25277:23;;25272:28;;25317:2;25322:33;25317:38;25310:45;;;;25409:10;25396:23;;25402:2;25397;:7;25396:23;;25391:28;;25436:2;25441:33;25436:38;25429:45;;;;25528:10;25515:23;;25521:2;25516;:7;25515:23;;25510:28;;25555:2;25560:33;25555:38;25548:45;;;;25647:10;25634:23;;25640:2;25635;:7;25634:23;;25629:28;;25674:2;25679:33;25674:38;25667:45;;;;25766:10;25753:23;;25759:2;25754;:7;25753:23;;25748:28;;25793:2;25798:33;25793:38;25786:45;;;;25885:10;25872:23;;25878:2;25873;:7;25872:23;;25867:28;;25912:2;25917:33;25912:38;25905:45;;;;26004:10;25991:23;;25997:2;25992;:7;25991:23;;25986:28;;26031:2;26036:33;26031:38;26024:45;;;;26123:10;26110:23;;26116:2;26111;:7;26110:23;;26105:28;;26150:2;26155:33;26150:38;26143:45;;;;26242:10;26229:23;;26235:2;26230;:7;26229:23;;26224:28;;26269:2;26274:33;26269:38;26262:45;;;;26361:10;26348:23;;26354:2;26349;:7;26348:23;;26343:28;;26388:2;26393:33;26388:38;26381:45;;;;26480:10;26467:23;;26473:2;26468;:7;26467:23;;26462:28;;26507:2;26512:33;26507:38;26500:45;;;;26599:10;26586:23;;26592:2;26587;:7;26586:23;;26581:28;;26626:2;26631:33;26626:38;26619:45;;;;26718:10;26705:23;;26711:2;26706;:7;26705:23;;26700:28;;26745:2;26750:33;26745:38;26738:45;;;;26837:10;26824:23;;26830:2;26825;:7;26824:23;;26819:28;;26864:2;26869:33;26864:38;26857:45;;;;26956:10;26943:23;;26949:2;26944;:7;26943:23;;26938:28;;26983:2;26988:33;26983:38;26976:45;;;;27075:10;27062:23;;27068:2;27063;:7;27062:23;;27057:28;;27102:2;27107:33;27102:38;27095:45;;;;27194:10;27181:23;;27187:2;27182;:7;27181:23;;27176:28;;27221:2;27226:33;27221:38;27214:45;;;;27313:10;27300:23;;27306:2;27301;:7;27300:23;;27295:28;;27340:2;27345:33;27340:38;27333:45;;;;27432:10;27419:23;;27425:2;27420;:7;27419:23;;27414:28;;27459:2;27464:33;27459:38;27452:45;;;;27551:10;27538:23;;27544:2;27539;:7;27538:23;;27533:28;;27578:2;27583:33;27578:38;27571:45;;;;27715:10;27708:17;;210:1;27708:17;;27702:2;27666:33;27660:3;:39;;;;;;:44;:66;;23701:4082;-1:-1:-1;;;;;23701:4082:21:o;1025:149:0:-;1083:9;1112:6;;;:30;;-1:-1:-1;;1127:5:0;;;1141:1;1136;1127:5;1136:1;1122:15;;;;;:20;1112:30;1104:63;;;;;-1:-1:-1;;;1104:63:0;;;;;;;;;;;;-1:-1:-1;;;1104:63:0;;;;;;;;;;;;;;744:135;836:5;;;831:16;;;;823:49;;;;;-1:-1:-1;;;823:49:0;;;;;;;;;;;;-1:-1:-1;;;823:49:0;;;;;;;;;;;;;;21820:513:21;21874:5;;21924:3;21919:8;;21915:391;;;21979:82;21991:1;21986:2;:6;21979:82;;;22019:1;22012:8;;;;22038;21979:82;;;21915:391;;;22142:3;22127:169;22147:5;;;;22127:169;;210:1;22192:8;;;;22185:16;;22181:101;;22225:8;;;;;;;;22255;;;;22181:101;22160:1;22154:7;;;22127:169;;;;22323:3;21820:513;-1:-1:-1;;21820:513:21:o;495:17370:25:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\";\nimport \"@daostack/arc/contracts/controller/Avatar.sol\";\nimport \"../../contracts/token/GoodDollar.sol\";\nimport \"../../contracts/dao/schemes/SchemeGuard.sol\";\nimport \"../../contracts/DSMath.sol\";\nimport \"./BancorFormula.sol\";\n\n/**\n@title Dynamic reserve ratio market maker\n*/\ncontract GoodMarketMaker is BancorFormula, DSMath, SchemeGuard {\n    using SafeMath for uint256;\n\n    // For calculate the return value on buy and sell\n    BancorFormula bancor;\n\n    // Entity that holds a reserve token\n    struct ReserveToken {\n        // Determines the reserve token balance\n        // that the reserve contract holds\n        uint256 reserveSupply;\n        // Determines the current ratio between\n        // the reserve token and the GD token\n        uint32 reserveRatio;\n        // How many GD tokens have been minted\n        // against that reserve token\n        uint256 gdSupply;\n    }\n\n    // The map which holds the reserve token entities\n    mapping(address => ReserveToken) public reserveTokens;\n\n    // Emits when a change has occurred in a\n    // reserve balance, i.e. buy / sell will\n    // change the balance\n    event BalancesUpdated(\n        // The account who initiated the action\n        address indexed caller,\n        // The address of the reserve token\n        address indexed reserveToken,\n        // The incoming amount\n        uint256 amount,\n        // The return value\n        uint256 returnAmount,\n        // The updated total supply\n        uint256 totalSupply,\n        // The updated reserve balance\n        uint256 reserveBalance\n    );\n\n    // Emits when the ratio changed. The caller should be the Avatar by definition\n    event ReserveRatioUpdated(address indexed caller, uint256 nom, uint256 denom);\n\n    // Emits when new tokens should be minted\n    // as a result of incoming interest.\n    // That event will be emitted after the\n    // reserve entity has been updated\n    event InterestMinted(\n        // The account who initiated the action\n        address indexed caller,\n        // The address of the reserve token\n        address indexed reserveToken,\n        // How much new reserve tokens been\n        // added to the reserve balance\n        uint256 addInterest,\n        // The GD supply in the reserve entity\n        // before the new minted GD tokens were\n        // added to the supply\n        uint256 oldSupply,\n        // The number of the new minted GD tokens\n        uint256 mint\n    );\n\n    // Emits when new tokens should be minted\n    // as a result of a reserve ratio expansion\n    // change. This change should have occurred\n    // on a regular basis. That event will be\n    // emitted after the reserve entity has been\n    // updated\n    event UBIExpansionMinted(\n        // The account who initiated the action\n        address indexed caller,\n        // The address of the reserve token\n        address indexed reserveToken,\n        // The reserve ratio before the expansion\n        uint256 oldReserveRatio,\n        // The GD supply in the reserve entity\n        // before the new minted GD tokens were\n        // added to the supply\n        uint256 oldSupply,\n        // The number of the new minted GD tokens\n        uint256 mint\n    );\n\n    // Defines the daily change in the reserve ratio in RAY precision.\n    // In the current release, only global ratio expansion is supported.\n    // That will be a part of each reserve token entity in the future.\n    uint256 public reserveRatioDailyExpansion;\n\n    /**\n     * @dev Constructor\n     * @param _avatar The avatar of the DAO\n     * @param _nom The numerator to calculate the global `reserveRatioDailyExpansion` from\n     * @param _denom The denominator to calculate the global `reserveRatioDailyExpansion` from\n     */\n    constructor(\n        Avatar _avatar,\n        uint256 _nom,\n        uint256 _denom\n    ) public SchemeGuard(_avatar) {\n        reserveRatioDailyExpansion = rdiv(_nom, _denom);\n    }\n\n    modifier onlyActiveToken(ERC20 _token) {\n        ReserveToken storage rtoken = reserveTokens[address(_token)];\n        require(rtoken.gdSupply > 0, \"Reserve token not initialized\");\n        _;\n    }\n\n    /**\n     * @dev Allows the DAO to change the daily expansion rate\n     * it is calculated by _nom/_denom with e27 precision. Emits\n     * `ReserveRatioUpdated` event after the ratio has changed.\n     * Only Avatar can call this method.\n     * @param _nom The numerator to calculate the global `reserveRatioDailyExpansion` from\n     * @param _denom The denominator to calculate the global `reserveRatioDailyExpansion` from\n     */\n    function setReserveRatioDailyExpansion(uint256 _nom, uint256 _denom)\n        public\n        onlyAvatar\n    {\n        require(_denom > 0, \"denominator must be above 0\");\n        reserveRatioDailyExpansion = rdiv(_nom, _denom);\n        emit ReserveRatioUpdated(msg.sender, _nom, _denom);\n    }\n\n    // NOTICE: In the current release, if there is a wish to add another reserve token,\n    //  `end` method in the reserve contract should be called first. Then, the DAO have\n    //  to deploy a new reserve contract that will own the market maker. A scheme for\n    // updating the new reserve must be deployed too.\n\n    /**\n     * @dev Initialize a reserve token entity with the given parameters\n     * @param _token The reserve token\n     * @param _gdSupply Initial supply of GD to set the price\n     * @param _tokenSupply Initial supply of reserve token to set the price\n     * @param _reserveRatio The starting reserve ratio\n     */\n    function initializeToken(\n        ERC20 _token,\n        uint256 _gdSupply,\n        uint256 _tokenSupply,\n        uint32 _reserveRatio\n    ) public onlyOwner {\n        reserveTokens[address(_token)] = ReserveToken({\n            gdSupply: _gdSupply,\n            reserveSupply: _tokenSupply,\n            reserveRatio: _reserveRatio\n        });\n    }\n\n    /**\n     * @dev Calculates how much to decrease the reserve ratio for _token by\n     * the `reserveRatioDailyExpansion`\n     * @param _token The reserve token to calculate the reserve ratio for\n     * @return The new reserve ratio\n     */\n    function calculateNewReserveRatio(ERC20 _token)\n        public\n        view\n        onlyActiveToken(_token)\n        returns (uint32)\n    {\n        ReserveToken memory reserveToken = reserveTokens[address(_token)];\n        uint32 ratio = reserveToken.reserveRatio;\n        if (ratio == 0) {\n            ratio = 1e6;\n        }\n        return\n            uint32(\n                rmul(\n                    uint256(ratio).mul(1e21), // expand to e27 precision\n                    reserveRatioDailyExpansion\n                )\n                    .div(1e21) // return to e6 precision\n            );\n    }\n\n    /**\n     * @dev Decreases the reserve ratio for _token by the `reserveRatioDailyExpansion`\n     * @param _token The token to change the reserve ratio for\n     * @return The new reserve ratio\n     */\n    function expandReserveRatio(ERC20 _token)\n        public\n        onlyOwner\n        onlyActiveToken(_token)\n        returns (uint32)\n    {\n        ReserveToken storage reserveToken = reserveTokens[address(_token)];\n        uint32 ratio = reserveToken.reserveRatio;\n        if (ratio == 0) {\n            ratio = 1e6;\n        }\n        reserveToken.reserveRatio = calculateNewReserveRatio(_token);\n        return reserveToken.reserveRatio;\n    }\n\n    /**\n     * @dev Calculates the buy return in GD according to the given _tokenAmount\n     * @param _token The reserve token buying with\n     * @param _tokenAmount The amount of reserve token buying with\n     * @return Number of GD that should be given in exchange as calculated by the bonding curve\n     */\n    function buyReturn(ERC20 _token, uint256 _tokenAmount)\n        public\n        view\n        onlyActiveToken(_token)\n        returns (uint256)\n    {\n        ReserveToken memory rtoken = reserveTokens[address(_token)];\n        return\n            calculatePurchaseReturn(\n                rtoken.gdSupply,\n                rtoken.reserveSupply,\n                rtoken.reserveRatio,\n                _tokenAmount\n            );\n    }\n\n    /**\n     * @dev Calculates the sell return in _token according to the given _gdAmount\n     * @param _token The desired reserve token to have\n     * @param _gdAmount The amount of GD that are sold\n     * @return Number of tokens that should be given in exchange as calculated by the bonding curve\n     */\n    function sellReturn(ERC20 _token, uint256 _gdAmount)\n        public\n        view\n        onlyActiveToken(_token)\n        returns (uint256)\n    {\n        ReserveToken memory rtoken = reserveTokens[address(_token)];\n        return\n            calculateSaleReturn(\n                rtoken.gdSupply,\n                rtoken.reserveSupply,\n                rtoken.reserveRatio,\n                _gdAmount\n            );\n    }\n\n    /**\n     * @dev Updates the _token bonding curve params. Emits `BalancesUpdated` with the\n     * new reserve token information.\n     * @param _token The reserve token buying with\n     * @param _tokenAmount The amount of reserve token buying with\n     * @return (gdReturn) Number of GD that will be given in exchange as calculated by the bonding curve\n     */\n    function buy(ERC20 _token, uint256 _tokenAmount)\n        public\n        onlyOwner\n        onlyActiveToken(_token)\n        returns (uint256)\n    {\n        uint256 gdReturn = buyReturn(_token, _tokenAmount);\n        ReserveToken storage rtoken = reserveTokens[address(_token)];\n        rtoken.gdSupply = rtoken.gdSupply.add(gdReturn);\n        rtoken.reserveSupply = rtoken.reserveSupply.add(_tokenAmount);\n        emit BalancesUpdated(\n            msg.sender,\n            address(_token),\n            _tokenAmount,\n            gdReturn,\n            rtoken.gdSupply,\n            rtoken.reserveSupply\n        );\n        return gdReturn;\n    }\n\n    /**\n     * @dev Updates the _token bonding curve params. Emits `BalancesUpdated` with the\n     * new reserve token information.\n     * @param _token The desired reserve token to have\n     * @param _gdAmount The amount of GD that are sold\n     * @return Number of tokens that will be given in exchange as calculated by the bonding curve\n     */\n    function sell(ERC20 _token, uint256 _gdAmount)\n        public\n        onlyOwner\n        onlyActiveToken(_token)\n        returns (uint256)\n    {\n        ReserveToken storage rtoken = reserveTokens[address(_token)];\n        require(rtoken.gdSupply > _gdAmount, \"GD amount is higher than the total supply\");\n        uint256 tokenReturn = sellReturn(_token, _gdAmount);\n        rtoken.gdSupply = rtoken.gdSupply.sub(_gdAmount);\n        rtoken.reserveSupply = rtoken.reserveSupply.sub(tokenReturn);\n        emit BalancesUpdated(\n            msg.sender,\n            address(_token),\n            _gdAmount,\n            tokenReturn,\n            rtoken.gdSupply,\n            rtoken.reserveSupply\n        );\n        return tokenReturn;\n    }\n\n    /**\n     * @dev Calculates the sell return with contribution in _token and update the bonding curve params.\n     * Emits `BalancesUpdated` with the new reserve token information.\n     * @param _token The desired reserve token to have\n     * @param _gdAmount The amount of GD that are sold\n     * @param _contributionGdAmount The number of GD tokens that will not be traded for the reserve token\n     * @return Number of tokens that will be given in exchange as calculated by the bonding curve\n     */\n    function sellWithContribution(\n        ERC20 _token,\n        uint256 _gdAmount,\n        uint256 _contributionGdAmount\n    ) public onlyOwner onlyActiveToken(_token) returns (uint256) {\n        require(\n            _gdAmount >= _contributionGdAmount,\n            \"GD amount is lower than the contribution amount\"\n        );\n        ReserveToken storage rtoken = reserveTokens[address(_token)];\n        require(rtoken.gdSupply > _gdAmount, \"GD amount is higher than the total supply\");\n\n        // Deduces the convertible amount of GD tokens by the given contribution amount\n        uint256 amountAfterContribution = _gdAmount.sub(_contributionGdAmount);\n\n        // The return value after the deduction\n        uint256 tokenReturn = sellReturn(_token, amountAfterContribution);\n        rtoken.gdSupply = rtoken.gdSupply.sub(_gdAmount);\n        rtoken.reserveSupply = rtoken.reserveSupply.sub(tokenReturn);\n        emit BalancesUpdated(\n            msg.sender,\n            address(_token),\n            _contributionGdAmount,\n            tokenReturn,\n            rtoken.gdSupply,\n            rtoken.reserveSupply\n        );\n        return tokenReturn;\n    }\n\n    /**\n     * @dev Current price of GD in `token`. currently only cDAI is supported.\n     * @param _token The desired reserve token to have\n     * @return price of GD\n     */\n    function currentPrice(ERC20 _token)\n        public\n        view\n        onlyActiveToken(_token)\n        returns (uint256)\n    {\n        ReserveToken memory rtoken = reserveTokens[address(_token)];\n        GoodDollar gooddollar = GoodDollar(address(avatar.nativeToken()));\n        return\n            calculateSaleReturn(\n                rtoken.gdSupply,\n                rtoken.reserveSupply,\n                rtoken.reserveRatio,\n                (10**uint256(gooddollar.decimals()))\n            );\n    }\n\n    //TODO: need real calculation and tests\n    /**\n     * @dev Calculates how much G$ to mint based on added token supply (from interest)\n     * and on current reserve ratio, in order to keep G$ price the same at the bonding curve\n     * formula to calculate the gd to mint: gd to mint =\n     * addreservebalance * (gdsupply / (reservebalance * reserveratio))\n     * @param _token the reserve token\n     * @param _addTokenSupply amount of token added to supply\n     * @return how much to mint in order to keep price in bonding curve the same\n     */\n    function calculateMintInterest(ERC20 _token, uint256 _addTokenSupply)\n        public\n        view\n        onlyActiveToken(_token)\n        returns (uint256)\n    {\n        GoodDollar gooddollar = GoodDollar(address(avatar.nativeToken()));\n        uint256 decimalsDiff = uint256(27).sub(uint256(gooddollar.decimals()));\n        //resulting amount is in RAY precision\n        //we divide by decimalsdiff to get precision in GD (2 decimals)\n        return rdiv(_addTokenSupply, currentPrice(_token)).div(10**decimalsDiff);\n    }\n\n    /**\n     * @dev Updates bonding curve based on _addTokenSupply and new minted amount\n     * @param _token The reserve token\n     * @param _addTokenSupply Amount of token added to supply\n     * @return How much to mint in order to keep price in bonding curve the same\n     */\n    function mintInterest(ERC20 _token, uint256 _addTokenSupply)\n        public\n        onlyOwner\n        returns (uint256)\n    {\n        if (_addTokenSupply == 0) {\n            return 0;\n        }\n        uint256 toMint = calculateMintInterest(_token, _addTokenSupply);\n        ReserveToken storage reserveToken = reserveTokens[address(_token)];\n        uint256 gdSupply = reserveToken.gdSupply;\n        uint256 reserveBalance = reserveToken.reserveSupply;\n        reserveToken.gdSupply = gdSupply.add(toMint);\n        reserveToken.reserveSupply = reserveBalance.add(_addTokenSupply);\n        emit InterestMinted(\n            msg.sender,\n            address(_token),\n            _addTokenSupply,\n            gdSupply,\n            toMint\n        );\n        return toMint;\n    }\n\n    /**\n     * @dev Calculate how much G$ to mint based on expansion change (new reserve\n     * ratio), in order to keep G$ price the same at the bonding curve. the\n     * formula to calculate the gd to mint: gd to mint =\n     * (reservebalance / (newreserveratio * currentprice)) - gdsupply\n     * @param _token The reserve token\n     * @return How much to mint in order to keep price in bonding curve the same\n     */\n    function calculateMintExpansion(ERC20 _token)\n        public\n        view\n        onlyActiveToken(_token)\n        returns (uint256)\n    {\n        ReserveToken memory reserveToken = reserveTokens[address(_token)];\n        uint32 newReserveRatio = calculateNewReserveRatio(_token); // new reserve ratio\n        uint256 reserveDecimalsDiff = uint256(\n            uint256(27).sub(ERC20Detailed(address(_token)).decimals())\n        ); // //result is in RAY precision\n        uint256 denom = rmul(\n            uint256(newReserveRatio).mul(1e21),\n            currentPrice(_token).mul(10**reserveDecimalsDiff)\n        ); // (newreserveratio * currentprice) in RAY precision\n        GoodDollar gooddollar = GoodDollar(address(avatar.nativeToken()));\n        uint256 gdDecimalsDiff = uint256(27).sub(uint256(gooddollar.decimals()));\n        uint256 toMint = rdiv(\n            reserveToken.reserveSupply.mul(10**reserveDecimalsDiff), // reservebalance in RAY precision\n            denom\n        )\n            .div(10**gdDecimalsDiff); // return to gd precision\n        return toMint.sub(reserveToken.gdSupply);\n    }\n\n    /**\n     * @dev Updates bonding curve based on expansion change and new minted amount\n     * @param _token The reserve token\n     * @return How much to mint in order to keep price in bonding curve the same\n     */\n    function mintExpansion(ERC20 _token) public onlyOwner returns (uint256) {\n        uint256 toMint = calculateMintExpansion(_token);\n        ReserveToken storage reserveToken = reserveTokens[address(_token)];\n        uint256 gdSupply = reserveToken.gdSupply;\n        uint256 ratio = reserveToken.reserveRatio;\n        reserveToken.gdSupply = gdSupply.add(toMint);\n        expandReserveRatio(_token);\n        emit UBIExpansionMinted(msg.sender, address(_token), ratio, gdSupply, toMint);\n        return toMint;\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol",
    "exportedSymbols": {
      "GoodMarketMaker": [
        8274
      ]
    },
    "id": 8275,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7373,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:25"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 7374,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 21309,
        "src": "25:59:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 7375,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 21850,
        "src": "85:63:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol",
        "id": 7376,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 21939,
        "src": "149:71:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 7377,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 12706,
        "src": "221:55:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
        "file": "../../contracts/token/GoodDollar.sol",
        "id": 7378,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 3768,
        "src": "277:46:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol",
        "file": "../../contracts/dao/schemes/SchemeGuard.sol",
        "id": 7379,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 1424,
        "src": "324:53:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol",
        "file": "../../contracts/DSMath.sol",
        "id": 7380,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 304,
        "src": "378:36:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/BancorFormula.sol",
        "file": "./BancorFormula.sol",
        "id": 7381,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 6618,
        "src": "415:29:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7382,
              "name": "BancorFormula",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6617,
              "src": "523:13:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BancorFormula_$6617",
                "typeString": "contract BancorFormula"
              }
            },
            "id": 7383,
            "nodeType": "InheritanceSpecifier",
            "src": "523:13:25"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7384,
              "name": "DSMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 303,
              "src": "538:6:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DSMath_$303",
                "typeString": "contract DSMath"
              }
            },
            "id": 7385,
            "nodeType": "InheritanceSpecifier",
            "src": "538:6:25"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7386,
              "name": "SchemeGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1423,
              "src": "546:11:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SchemeGuard_$1423",
                "typeString": "contract SchemeGuard"
              }
            },
            "id": 7387,
            "nodeType": "InheritanceSpecifier",
            "src": "546:11:25"
          }
        ],
        "contractDependencies": [
          303,
          1423,
          6617,
          21417
        ],
        "contractKind": "contract",
        "documentation": "@title Dynamic reserve ratio market maker",
        "fullyImplemented": true,
        "id": 8274,
        "linearizedBaseContracts": [
          8274,
          1423,
          21417,
          303,
          6617
        ],
        "name": "GoodMarketMaker",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7390,
            "libraryName": {
              "contractScope": null,
              "id": 7388,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "570:8:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "564:27:25",
            "typeName": {
              "id": 7389,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "583:7:25",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 7392,
            "name": "bancor",
            "nodeType": "VariableDeclaration",
            "scope": 8274,
            "src": "651:20:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_BancorFormula_$6617",
              "typeString": "contract BancorFormula"
            },
            "typeName": {
              "contractScope": null,
              "id": 7391,
              "name": "BancorFormula",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6617,
              "src": "651:13:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BancorFormula_$6617",
                "typeString": "contract BancorFormula"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "GoodMarketMaker.ReserveToken",
            "id": 7399,
            "members": [
              {
                "constant": false,
                "id": 7394,
                "name": "reserveSupply",
                "nodeType": "VariableDeclaration",
                "scope": 7399,
                "src": "840:21:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7393,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "840:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7396,
                "name": "reserveRatio",
                "nodeType": "VariableDeclaration",
                "scope": 7399,
                "src": "965:19:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 7395,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "965:6:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7398,
                "name": "gdSupply",
                "nodeType": "VariableDeclaration",
                "scope": 7399,
                "src": "1079:16:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7397,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1079:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ReserveToken",
            "nodeType": "StructDefinition",
            "scope": 8274,
            "src": "719:383:25",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7403,
            "name": "reserveTokens",
            "nodeType": "VariableDeclaration",
            "scope": 8274,
            "src": "1162:53:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
              "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken)"
            },
            "typeName": {
              "id": 7402,
              "keyType": {
                "id": 7400,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1170:7:25",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1162:32:25",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken)"
              },
              "valueType": {
                "contractScope": null,
                "id": 7401,
                "name": "ReserveToken",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7399,
                "src": "1181:12:25",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                  "typeString": "struct GoodMarketMaker.ReserveToken"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7417,
            "name": "BalancesUpdated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7405,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1417:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7404,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1417:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7407,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1493:28:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7406,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1493:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7409,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1562:14:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7408,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1562:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7411,
                  "indexed": false,
                  "name": "returnAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1614:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7410,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1614:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7413,
                  "indexed": false,
                  "name": "totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1680:19:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7412,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1680:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7415,
                  "indexed": false,
                  "name": "reserveBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1748:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7414,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1748:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1359:417:25"
            },
            "src": "1338:439:25"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7425,
            "name": "ReserveRatioUpdated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7424,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7419,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7425,
                  "src": "1892:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1892:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7421,
                  "indexed": false,
                  "name": "nom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7425,
                  "src": "1916:11:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7420,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1916:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7423,
                  "indexed": false,
                  "name": "denom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7425,
                  "src": "1929:13:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7422,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1929:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1891:52:25"
            },
            "src": "1866:78:25"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7437,
            "name": "InterestMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7427,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2198:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7426,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7429,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2274:28:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7428,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2274:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7431,
                  "indexed": false,
                  "name": "addInterest",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2396:19:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2396:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7433,
                  "indexed": false,
                  "name": "oldSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2551:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2551:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7435,
                  "indexed": false,
                  "name": "mint",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2628:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2628:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2140:506:25"
            },
            "src": "2120:527:25"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7449,
            "name": "UBIExpansionMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7439,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "2987:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2987:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7441,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "3063:28:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3063:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7443,
                  "indexed": false,
                  "name": "oldReserveRatio",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "3151:23:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3151:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7445,
                  "indexed": false,
                  "name": "oldSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "3310:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7444,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3310:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7447,
                  "indexed": false,
                  "name": "mint",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "3387:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7446,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3387:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2929:476:25"
            },
            "src": "2905:501:25"
          },
          {
            "constant": false,
            "id": 7451,
            "name": "reserveRatioDailyExpansion",
            "nodeType": "VariableDeclaration",
            "scope": 8274,
            "src": "3627:41:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 7450,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3627:7:25",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7470,
              "nodeType": "Block",
              "src": "4061:64:25",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7463,
                      "name": "reserveRatioDailyExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7451,
                      "src": "4071:26:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7465,
                          "name": "_nom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7455,
                          "src": "4105:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7466,
                          "name": "_denom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7457,
                          "src": "4111:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7464,
                        "name": "rdiv",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 247,
                        "src": "4100:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 7467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4100:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4071:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7469,
                  "nodeType": "ExpressionStatement",
                  "src": "4071:47:25"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param _avatar The avatar of the DAO\n@param _nom The numerator to calculate the global `reserveRatioDailyExpansion` from\n@param _denom The denominator to calculate the global `reserveRatioDailyExpansion` from",
            "id": 7471,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7460,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7453,
                    "src": "4052:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 7461,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7459,
                  "name": "SchemeGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1423,
                  "src": "4040:11:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_SchemeGuard_$1423_$",
                    "typeString": "type(contract SchemeGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4040:20:25"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7453,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7471,
                  "src": "3966:14:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7452,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "3966:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7455,
                  "name": "_nom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7471,
                  "src": "3990:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7454,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3990:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7457,
                  "name": "_denom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7471,
                  "src": "4012:14:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7456,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4012:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3956:76:25"
            },
            "returnParameters": {
              "id": 7462,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4061:0:25"
            },
            "scope": 8274,
            "src": "3945:180:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7492,
              "nodeType": "Block",
              "src": "4170:159:25",
              "statements": [
                {
                  "assignments": [
                    7476
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7476,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7492,
                      "src": "4180:27:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7475,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "4180:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7482,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7477,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "4210:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7481,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7479,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7473,
                          "src": "4232:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7478,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4224:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4224:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4210:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4180:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7484,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7476,
                            "src": "4258:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7485,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "4258:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4276:1:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4258:19:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5265736572766520746f6b656e206e6f7420696e697469616c697a6564",
                        "id": 7488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4279:31:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e4f47ee67cfd0c95fa58f901ff1f8dfb299fd997b46fb4779faf61670628ec93",
                          "typeString": "literal_string \"Reserve token not initialized\""
                        },
                        "value": "Reserve token not initialized"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e4f47ee67cfd0c95fa58f901ff1f8dfb299fd997b46fb4779faf61670628ec93",
                          "typeString": "literal_string \"Reserve token not initialized\""
                        }
                      ],
                      "id": 7483,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "4250:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4250:61:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7490,
                  "nodeType": "ExpressionStatement",
                  "src": "4250:61:25"
                },
                {
                  "id": 7491,
                  "nodeType": "PlaceholderStatement",
                  "src": "4321:1:25"
                }
              ]
            },
            "documentation": null,
            "id": 7493,
            "name": "onlyActiveToken",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7473,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7493,
                  "src": "4156:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7472,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "4156:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4155:14:25"
            },
            "src": "4131:198:25",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7523,
              "nodeType": "Block",
              "src": "4876:184:25",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7503,
                          "name": "_denom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7497,
                          "src": "4894:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4903:1:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4894:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "64656e6f6d696e61746f72206d7573742062652061626f76652030",
                        "id": 7506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4906:29:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1cf1150df689bda2eecea23ff11d17ee1261200b54b707a3861023c2a6a11f01",
                          "typeString": "literal_string \"denominator must be above 0\""
                        },
                        "value": "denominator must be above 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1cf1150df689bda2eecea23ff11d17ee1261200b54b707a3861023c2a6a11f01",
                          "typeString": "literal_string \"denominator must be above 0\""
                        }
                      ],
                      "id": 7502,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "4886:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4886:50:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7508,
                  "nodeType": "ExpressionStatement",
                  "src": "4886:50:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7509,
                      "name": "reserveRatioDailyExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7451,
                      "src": "4946:26:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7511,
                          "name": "_nom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7495,
                          "src": "4980:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7512,
                          "name": "_denom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7497,
                          "src": "4986:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7510,
                        "name": "rdiv",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 247,
                        "src": "4975:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 7513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4975:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4946:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7515,
                  "nodeType": "ExpressionStatement",
                  "src": "4946:47:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7517,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "5028:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5028:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7519,
                        "name": "_nom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7495,
                        "src": "5040:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7520,
                        "name": "_denom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7497,
                        "src": "5046:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7516,
                      "name": "ReserveRatioUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7425,
                      "src": "5008:19:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 7521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5008:45:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7522,
                  "nodeType": "EmitStatement",
                  "src": "5003:50:25"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the daily expansion rate\nit is calculated by _nom/_denom with e27 precision. Emits\n`ReserveRatioUpdated` event after the ratio has changed.\nOnly Avatar can call this method.\n@param _nom The numerator to calculate the global `reserveRatioDailyExpansion` from\n@param _denom The denominator to calculate the global `reserveRatioDailyExpansion` from",
            "id": 7524,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7500,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7499,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "4861:10:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4861:10:25"
              }
            ],
            "name": "setReserveRatioDailyExpansion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7498,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7495,
                  "name": "_nom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7524,
                  "src": "4808:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7494,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4808:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7497,
                  "name": "_denom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7524,
                  "src": "4822:14:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7496,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4822:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4807:30:25"
            },
            "returnParameters": {
              "id": 7501,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4876:0:25"
            },
            "scope": 8274,
            "src": "4769:291:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7549,
              "nodeType": "Block",
              "src": "5860:189:25",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7537,
                        "name": "reserveTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7403,
                        "src": "5870:13:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                          "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                        }
                      },
                      "id": 7541,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7539,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7526,
                            "src": "5892:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 7538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5884:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5884:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5870:30:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7543,
                          "name": "_gdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7528,
                          "src": "5940:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7544,
                          "name": "_tokenSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7530,
                          "src": "5978:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7545,
                          "name": "_reserveRatio",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7532,
                          "src": "6018:13:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        ],
                        "id": 7542,
                        "name": "ReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7399,
                        "src": "5903:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_ReserveToken_$7399_storage_ptr_$",
                          "typeString": "type(struct GoodMarketMaker.ReserveToken storage pointer)"
                        }
                      },
                      "id": 7546,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "gdSupply",
                        "reserveSupply",
                        "reserveRatio"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "5903:139:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory",
                        "typeString": "struct GoodMarketMaker.ReserveToken memory"
                      }
                    },
                    "src": "5870:172:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "id": 7548,
                  "nodeType": "ExpressionStatement",
                  "src": "5870:172:25"
                }
              ]
            },
            "documentation": "@dev Initialize a reserve token entity with the given parameters\n@param _token The reserve token\n@param _gdSupply Initial supply of GD to set the price\n@param _tokenSupply Initial supply of reserve token to set the price\n@param _reserveRatio The starting reserve ratio",
            "id": 7550,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7535,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7534,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "5850:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5850:9:25"
              }
            ],
            "name": "initializeToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7526,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "5737:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7525,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "5737:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7528,
                  "name": "_gdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "5759:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7527,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5759:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7530,
                  "name": "_tokenSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "5786:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7529,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5786:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7532,
                  "name": "_reserveRatio",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "5816:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 7531,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5816:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5727:115:25"
            },
            "returnParameters": {
              "id": 7536,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5860:0:25"
            },
            "scope": 8274,
            "src": "5703:346:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7597,
              "nodeType": "Block",
              "src": "6435:460:25",
              "statements": [
                {
                  "assignments": [
                    7561
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7561,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7597,
                      "src": "6445:32:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7560,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "6445:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7567,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7562,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "6480:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7566,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7564,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7552,
                          "src": "6502:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6494:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6494:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6480:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6445:65:25"
                },
                {
                  "assignments": [
                    7569
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7569,
                      "name": "ratio",
                      "nodeType": "VariableDeclaration",
                      "scope": 7597,
                      "src": "6520:12:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 7568,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6520:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7572,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7570,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7561,
                      "src": "6535:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken memory"
                      }
                    },
                    "id": 7571,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveRatio",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7396,
                    "src": "6535:25:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6520:40:25"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 7575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7573,
                      "name": "ratio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7569,
                      "src": "6574:5:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6583:1:25",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6574:10:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7581,
                  "nodeType": "IfStatement",
                  "src": "6570:52:25",
                  "trueBody": {
                    "id": 7580,
                    "nodeType": "Block",
                    "src": "6586:36:25",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7576,
                            "name": "ratio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7569,
                            "src": "6600:5:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "316536",
                            "id": 7577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6608:3:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000_by_1",
                              "typeString": "int_const 1000000"
                            },
                            "value": "1e6"
                          },
                          "src": "6600:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 7579,
                        "nodeType": "ExpressionStatement",
                        "src": "6600:11:25"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31653231",
                            "id": 7593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6843:4:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                              "typeString": "int_const 1000000000000000000000"
                            },
                            "value": "1e21"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                              "typeString": "int_const 1000000000000000000000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31653231",
                                    "id": 7588,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6719:4:25",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                                      "typeString": "int_const 1000000000000000000000"
                                    },
                                    "value": "1e21"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                                      "typeString": "int_const 1000000000000000000000"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 7585,
                                        "name": "ratio",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7569,
                                        "src": "6708:5:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      ],
                                      "id": 7584,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "6700:7:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint256"
                                    },
                                    "id": 7586,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6700:14:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7587,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21215,
                                  "src": "6700:18:25",
                                  "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": 7589,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6700:24:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 7590,
                                "name": "reserveRatioDailyExpansion",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7451,
                                "src": "6773:26:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7583,
                              "name": "rmul",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 199,
                              "src": "6674:4:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7591,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6674:143:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21239,
                          "src": "6674:168:25",
                          "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": 7594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6674:174:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6650:6:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint32_$",
                        "typeString": "type(uint32)"
                      },
                      "typeName": "uint32"
                    },
                    "id": 7595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6650:238:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 7559,
                  "id": 7596,
                  "nodeType": "Return",
                  "src": "6631:257:25"
                }
              ]
            },
            "documentation": "@dev Calculates how much to decrease the reserve ratio for _token by\nthe `reserveRatioDailyExpansion`\n@param _token The reserve token to calculate the reserve ratio for\n@return The new reserve ratio",
            "id": 7598,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7555,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7552,
                    "src": "6398:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7556,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7554,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "6382:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6382:23:25"
              }
            ],
            "name": "calculateNewReserveRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7552,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7598,
                  "src": "6332:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7551,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "6332:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6331:14:25"
            },
            "returnParameters": {
              "id": 7559,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7558,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7598,
                  "src": "6423:6:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 7557,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6423:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6422:8:25"
            },
            "scope": 8274,
            "src": "6298:597:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7643,
              "nodeType": "Block",
              "src": "7240:306:25",
              "statements": [
                {
                  "assignments": [
                    7611
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7611,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7643,
                      "src": "7250:33:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7610,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "7250:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7617,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7612,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "7286:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7616,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7614,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7600,
                          "src": "7308:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7300:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7615,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7300:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7286:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7250:66:25"
                },
                {
                  "assignments": [
                    7619
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7619,
                      "name": "ratio",
                      "nodeType": "VariableDeclaration",
                      "scope": 7643,
                      "src": "7326:12:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 7618,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7326:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7622,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7620,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7611,
                      "src": "7341:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 7621,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveRatio",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7396,
                    "src": "7341:25:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7326:40:25"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 7625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7623,
                      "name": "ratio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7619,
                      "src": "7380:5:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7389:1:25",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7380:10:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7631,
                  "nodeType": "IfStatement",
                  "src": "7376:52:25",
                  "trueBody": {
                    "id": 7630,
                    "nodeType": "Block",
                    "src": "7392:36:25",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7626,
                            "name": "ratio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7619,
                            "src": "7406:5:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "316536",
                            "id": 7627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7414:3:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000_by_1",
                              "typeString": "int_const 1000000"
                            },
                            "value": "1e6"
                          },
                          "src": "7406:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 7629,
                        "nodeType": "ExpressionStatement",
                        "src": "7406:11:25"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7632,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7611,
                        "src": "7437:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7634,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveRatio",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7396,
                      "src": "7437:25:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7636,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7600,
                          "src": "7490:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7635,
                        "name": "calculateNewReserveRatio",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7598,
                        "src": "7465:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint32_$",
                          "typeString": "function (contract ERC20) view returns (uint32)"
                        }
                      },
                      "id": 7637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7465:32:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "7437:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 7639,
                  "nodeType": "ExpressionStatement",
                  "src": "7437:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7640,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7611,
                      "src": "7514:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 7641,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveRatio",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7396,
                    "src": "7514:25:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 7609,
                  "id": 7642,
                  "nodeType": "Return",
                  "src": "7507:32:25"
                }
              ]
            },
            "documentation": "@dev Decreases the reserve ratio for _token by the `reserveRatioDailyExpansion`\n@param _token The token to change the reserve ratio for\n@return The new reserve ratio",
            "id": 7644,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7603,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7602,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "7169:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7169:9:25"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7605,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7600,
                    "src": "7203:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7606,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7604,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "7187:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7187:23:25"
              }
            ],
            "name": "expandReserveRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7601,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7600,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7644,
                  "src": "7132:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7599,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "7132:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7131:14:25"
            },
            "returnParameters": {
              "id": 7609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7608,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7644,
                  "src": "7228:6:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 7607,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7228:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7227:8:25"
            },
            "scope": 8274,
            "src": "7104:442:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7674,
              "nodeType": "Block",
              "src": "8007:280:25",
              "statements": [
                {
                  "assignments": [
                    7657
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7657,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7674,
                      "src": "8017:26:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7656,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "8017:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7663,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7658,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "8046:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7662,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7660,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7646,
                          "src": "8068:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7659,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8060:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7661,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8060:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8046:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8017:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7665,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7657,
                          "src": "8146:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7666,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "8146:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7667,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7657,
                          "src": "8179:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7668,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "8179:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7669,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7657,
                          "src": "8217:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7670,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveRatio",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7396,
                        "src": "8217:19:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7671,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7648,
                        "src": "8254:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7664,
                      "name": "calculatePurchaseReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4593,
                      "src": "8105:23:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint32,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8105:175:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7655,
                  "id": 7673,
                  "nodeType": "Return",
                  "src": "8086:194:25"
                }
              ]
            },
            "documentation": "@dev Calculates the buy return in GD according to the given _tokenAmount\n@param _token The reserve token buying with\n@param _tokenAmount The amount of reserve token buying with\n@return Number of GD that should be given in exchange as calculated by the bonding curve",
            "id": 7675,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7651,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7646,
                    "src": "7969:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7652,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7650,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "7953:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7953:23:25"
              }
            ],
            "name": "buyReturn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7649,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7646,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7675,
                  "src": "7881:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7645,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "7881:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7648,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7675,
                  "src": "7895:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7647,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7895:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7880:36:25"
            },
            "returnParameters": {
              "id": 7655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7654,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7675,
                  "src": "7994:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7653,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7994:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7993:9:25"
            },
            "scope": 8274,
            "src": "7862:425:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7705,
              "nodeType": "Block",
              "src": "8744:273:25",
              "statements": [
                {
                  "assignments": [
                    7688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7688,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7705,
                      "src": "8754:26:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7687,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "8754:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7694,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7689,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "8783:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7693,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7691,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7677,
                          "src": "8805:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8797:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8797:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8783:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8754:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7696,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7688,
                          "src": "8879:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7697,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "8879:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7698,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7688,
                          "src": "8912:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7699,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "8912:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7700,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7688,
                          "src": "8950:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7701,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveRatio",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7396,
                        "src": "8950:19:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7702,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7679,
                        "src": "8987:9:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7695,
                      "name": "calculateSaleReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4695,
                      "src": "8842:19:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint32,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8842:168:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7686,
                  "id": 7704,
                  "nodeType": "Return",
                  "src": "8823:187:25"
                }
              ]
            },
            "documentation": "@dev Calculates the sell return in _token according to the given _gdAmount\n@param _token The desired reserve token to have\n@param _gdAmount The amount of GD that are sold\n@return Number of tokens that should be given in exchange as calculated by the bonding curve",
            "id": 7706,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7682,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7677,
                    "src": "8706:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7683,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7681,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "8690:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8690:23:25"
              }
            ],
            "name": "sellReturn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7677,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7706,
                  "src": "8621:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7676,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "8621:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7679,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7706,
                  "src": "8635:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7678,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8635:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8620:33:25"
            },
            "returnParameters": {
              "id": 7686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7685,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7706,
                  "src": "8731:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7684,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8731:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8730:9:25"
            },
            "scope": 8274,
            "src": "8601:416:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7771,
              "nodeType": "Block",
              "src": "9530:494:25",
              "statements": [
                {
                  "assignments": [
                    7721
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7721,
                      "name": "gdReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 7771,
                      "src": "9540:16:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7720,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9540:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7726,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7723,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7708,
                        "src": "9569:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7724,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7710,
                        "src": "9577:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7722,
                      "name": "buyReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7675,
                      "src": "9559:9:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9559:31:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9540:50:25"
                },
                {
                  "assignments": [
                    7728
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7728,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7771,
                      "src": "9600:27:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7727,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "9600:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7734,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7729,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "9630:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7733,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7731,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7708,
                          "src": "9652:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7730,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "9644:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9644:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9630:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9600:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7735,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7728,
                        "src": "9670:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7737,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "9670:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7741,
                          "name": "gdReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7721,
                          "src": "9708:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7738,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7728,
                            "src": "9688:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7739,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "9688:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "9688:19:25",
                        "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": 7742,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9688:29:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9670:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7744,
                  "nodeType": "ExpressionStatement",
                  "src": "9670:47:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7745,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7728,
                        "src": "9727:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7747,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7394,
                      "src": "9727:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7751,
                          "name": "_tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7710,
                          "src": "9775:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7748,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7728,
                            "src": "9750:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7749,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reserveSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7394,
                          "src": "9750:20:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "9750:24:25",
                        "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": 7752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9750:38:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9727:61:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7754,
                  "nodeType": "ExpressionStatement",
                  "src": "9727:61:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7756,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9832:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9832:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7759,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7708,
                            "src": "9864:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 7758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9856:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9856:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7761,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7710,
                        "src": "9885:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7762,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7721,
                        "src": "9911:8:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7763,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7728,
                          "src": "9933:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7764,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "9933:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7765,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7728,
                          "src": "9962:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7766,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "9962:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7755,
                      "name": "BalancesUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7417,
                      "src": "9803:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9803:189:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7768,
                  "nodeType": "EmitStatement",
                  "src": "9798:194:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7769,
                    "name": "gdReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7721,
                    "src": "10009:8:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7719,
                  "id": 7770,
                  "nodeType": "Return",
                  "src": "10002:15:25"
                }
              ]
            },
            "documentation": "@dev Updates the _token bonding curve params. Emits `BalancesUpdated` with the\nnew reserve token information.\n@param _token The reserve token buying with\n@param _tokenAmount The amount of reserve token buying with\n@return (gdReturn) Number of GD that will be given in exchange as calculated by the bonding curve",
            "id": 7772,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7713,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7712,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "9458:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9458:9:25"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7715,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7708,
                    "src": "9492:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7716,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7714,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "9476:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9476:23:25"
              }
            ],
            "name": "buy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7711,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7708,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7772,
                  "src": "9399:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7707,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "9399:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7710,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7772,
                  "src": "9413:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7709,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9413:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9398:36:25"
            },
            "returnParameters": {
              "id": 7719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7718,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7772,
                  "src": "9517:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9517:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9516:9:25"
            },
            "scope": 8274,
            "src": "9386:638:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7845,
              "nodeType": "Block",
              "src": "10520:589:25",
              "statements": [
                {
                  "assignments": [
                    7787
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7787,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7845,
                      "src": "10530:27:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7786,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "10530:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7793,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7788,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "10560:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7792,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7790,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7774,
                          "src": "10582:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10574:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7791,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10574:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10560:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10530:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7798,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7795,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7787,
                            "src": "10608:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7796,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "10608:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7797,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7776,
                          "src": "10626:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10608:27:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "474420616d6f756e7420697320686967686572207468616e2074686520746f74616c20737570706c79",
                        "id": 7799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10637:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_34611db31e8463578e00b4b067aff93f2ff0d183c2c0e2e1843ad2d0b6427aae",
                          "typeString": "literal_string \"GD amount is higher than the total supply\""
                        },
                        "value": "GD amount is higher than the total supply"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_34611db31e8463578e00b4b067aff93f2ff0d183c2c0e2e1843ad2d0b6427aae",
                          "typeString": "literal_string \"GD amount is higher than the total supply\""
                        }
                      ],
                      "id": 7794,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10600:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10600:81:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7801,
                  "nodeType": "ExpressionStatement",
                  "src": "10600:81:25"
                },
                {
                  "assignments": [
                    7803
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7803,
                      "name": "tokenReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 7845,
                      "src": "10691:19:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7802,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10691:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7808,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7805,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7774,
                        "src": "10724:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7806,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7776,
                        "src": "10732:9:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7804,
                      "name": "sellReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7706,
                      "src": "10713:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10713:29:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10691:51:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7809,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7787,
                        "src": "10752:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7811,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "10752:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7815,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7776,
                          "src": "10790:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7812,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7787,
                            "src": "10770:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7813,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "10770:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21263,
                        "src": "10770:19:25",
                        "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": 7816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10770:30:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10752:48:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7818,
                  "nodeType": "ExpressionStatement",
                  "src": "10752:48:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7819,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7787,
                        "src": "10810:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7821,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7394,
                      "src": "10810:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7825,
                          "name": "tokenReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7803,
                          "src": "10858:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7822,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7787,
                            "src": "10833:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7823,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reserveSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7394,
                          "src": "10833:20:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21263,
                        "src": "10833:24:25",
                        "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": 7826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10833:37:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10810:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7828,
                  "nodeType": "ExpressionStatement",
                  "src": "10810:60:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7830,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10914:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10914:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7833,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7774,
                            "src": "10946:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 7832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10938:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10938:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7835,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7776,
                        "src": "10967:9:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7836,
                        "name": "tokenReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7803,
                        "src": "10990:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7837,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7787,
                          "src": "11015:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7838,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "11015:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7839,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7787,
                          "src": "11044:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7840,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "11044:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7829,
                      "name": "BalancesUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7417,
                      "src": "10885:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10885:189:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7842,
                  "nodeType": "EmitStatement",
                  "src": "10880:194:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7843,
                    "name": "tokenReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7803,
                    "src": "11091:11:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7785,
                  "id": 7844,
                  "nodeType": "Return",
                  "src": "11084:18:25"
                }
              ]
            },
            "documentation": "@dev Updates the _token bonding curve params. Emits `BalancesUpdated` with the\nnew reserve token information.\n@param _token The desired reserve token to have\n@param _gdAmount The amount of GD that are sold\n@return Number of tokens that will be given in exchange as calculated by the bonding curve",
            "id": 7846,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7779,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7778,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "10448:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10448:9:25"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7781,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7774,
                    "src": "10482:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7782,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7780,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "10466:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10466:23:25"
              }
            ],
            "name": "sell",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7774,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7846,
                  "src": "10392:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7773,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "10392:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7776,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7846,
                  "src": "10406:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7775,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10406:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10391:33:25"
            },
            "returnParameters": {
              "id": 7785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7784,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7846,
                  "src": "10507:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10507:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10506:9:25"
            },
            "scope": 8274,
            "src": "10378:731:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7935,
              "nodeType": "Block",
              "src": "11803:971:25",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7863,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7850,
                          "src": "11834:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7864,
                          "name": "_contributionGdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7852,
                          "src": "11847:21:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11834:34:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "474420616d6f756e74206973206c6f776572207468616e2074686520636f6e747269627574696f6e20616d6f756e74",
                        "id": 7866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11882:49:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_94166c863d1852d5565ab4465c9748e8eef8644b04466a9cb31548631469d799",
                          "typeString": "literal_string \"GD amount is lower than the contribution amount\""
                        },
                        "value": "GD amount is lower than the contribution amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_94166c863d1852d5565ab4465c9748e8eef8644b04466a9cb31548631469d799",
                          "typeString": "literal_string \"GD amount is lower than the contribution amount\""
                        }
                      ],
                      "id": 7862,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "11813:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11813:128:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7868,
                  "nodeType": "ExpressionStatement",
                  "src": "11813:128:25"
                },
                {
                  "assignments": [
                    7870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7870,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7935,
                      "src": "11951:27:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7869,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "11951:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7876,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7871,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "11981:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7875,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7873,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7848,
                          "src": "12003:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7872,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11995:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11995:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11981:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11951:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7878,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7870,
                            "src": "12029:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7879,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "12029:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7880,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7850,
                          "src": "12047:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12029:27:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "474420616d6f756e7420697320686967686572207468616e2074686520746f74616c20737570706c79",
                        "id": 7882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12058:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_34611db31e8463578e00b4b067aff93f2ff0d183c2c0e2e1843ad2d0b6427aae",
                          "typeString": "literal_string \"GD amount is higher than the total supply\""
                        },
                        "value": "GD amount is higher than the total supply"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_34611db31e8463578e00b4b067aff93f2ff0d183c2c0e2e1843ad2d0b6427aae",
                          "typeString": "literal_string \"GD amount is higher than the total supply\""
                        }
                      ],
                      "id": 7877,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "12021:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12021:81:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7884,
                  "nodeType": "ExpressionStatement",
                  "src": "12021:81:25"
                },
                {
                  "assignments": [
                    7886
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7886,
                      "name": "amountAfterContribution",
                      "nodeType": "VariableDeclaration",
                      "scope": 7935,
                      "src": "12201:31:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7885,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12201:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7891,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7889,
                        "name": "_contributionGdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7852,
                        "src": "12249:21:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7887,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7850,
                        "src": "12235:9:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7888,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "12235:13:25",
                      "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": 7890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12235:36:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12201:70:25"
                },
                {
                  "assignments": [
                    7893
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7893,
                      "name": "tokenReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 7935,
                      "src": "12330:19:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7892,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12330:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7898,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7895,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7848,
                        "src": "12363:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7896,
                        "name": "amountAfterContribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7886,
                        "src": "12371:23:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7894,
                      "name": "sellReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7706,
                      "src": "12352:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12352:43:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12330:65:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7899,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7870,
                        "src": "12405:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7901,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "12405:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7905,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7850,
                          "src": "12443:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7902,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7870,
                            "src": "12423:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7903,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "12423:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21263,
                        "src": "12423:19:25",
                        "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": 7906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12423:30:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12405:48:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7908,
                  "nodeType": "ExpressionStatement",
                  "src": "12405:48:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7909,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7870,
                        "src": "12463:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7911,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7394,
                      "src": "12463:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7915,
                          "name": "tokenReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7893,
                          "src": "12511:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7912,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7870,
                            "src": "12486:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7913,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reserveSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7394,
                          "src": "12486:20:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7914,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21263,
                        "src": "12486:24:25",
                        "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": 7916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12486:37:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12463:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7918,
                  "nodeType": "ExpressionStatement",
                  "src": "12463:60:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7920,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "12567:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7921,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "12567:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7923,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7848,
                            "src": "12599:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 7922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12591:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12591:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7925,
                        "name": "_contributionGdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7852,
                        "src": "12620:21:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7926,
                        "name": "tokenReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7893,
                        "src": "12655:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7927,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7870,
                          "src": "12680:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7928,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "12680:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7929,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7870,
                          "src": "12709:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7930,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "12709:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7919,
                      "name": "BalancesUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7417,
                      "src": "12538:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12538:201:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7932,
                  "nodeType": "EmitStatement",
                  "src": "12533:206:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7933,
                    "name": "tokenReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7893,
                    "src": "12756:11:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7861,
                  "id": 7934,
                  "nodeType": "Return",
                  "src": "12749:18:25"
                }
              ]
            },
            "documentation": "@dev Calculates the sell return with contribution in _token and update the bonding curve params.\nEmits `BalancesUpdated` with the new reserve token information.\n@param _token The desired reserve token to have\n@param _gdAmount The amount of GD that are sold\n@param _contributionGdAmount The number of GD tokens that will not be traded for the reserve token\n@return Number of tokens that will be given in exchange as calculated by the bonding curve",
            "id": 7936,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7855,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7854,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "11751:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11751:9:25"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7857,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7848,
                    "src": "11777:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7858,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7856,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "11761:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11761:23:25"
              }
            ],
            "name": "sellWithContribution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7848,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7936,
                  "src": "11659:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7847,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "11659:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7850,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7936,
                  "src": "11681:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7849,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11681:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7852,
                  "name": "_contributionGdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7936,
                  "src": "11708:29:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11708:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11649:94:25"
            },
            "returnParameters": {
              "id": 7861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7860,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7936,
                  "src": "11794:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7859,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11794:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11793:9:25"
            },
            "scope": 8274,
            "src": "11620:1154:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7981,
              "nodeType": "Block",
              "src": "13082:375:25",
              "statements": [
                {
                  "assignments": [
                    7947
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7947,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7981,
                      "src": "13092:26:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7946,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "13092:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7953,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7948,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "13121:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7952,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7950,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7938,
                          "src": "13143:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13135:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13135:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13121:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13092:59:25"
                },
                {
                  "assignments": [
                    7955
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7955,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 7981,
                      "src": "13161:21:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7954,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "13161:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7963,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7958,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "13204:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 7959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "13204:18:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 7960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13204:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 7957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13196:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13196:29:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7956,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "13185:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 7962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13185:41:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13161:65:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7965,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "13292:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7966,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "13292:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7967,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "13325:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7968,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "13325:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7969,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "13363:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7970,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveRatio",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7396,
                        "src": "13363:19:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7977,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3130",
                              "id": 7971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13401:2:25",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_10_by_1",
                                "typeString": "int_const 10"
                              },
                              "value": "10"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "**",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7973,
                                      "name": "gooddollar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7955,
                                      "src": "13413:10:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                        "typeString": "contract GoodDollar"
                                      }
                                    },
                                    "id": 7974,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "decimals",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3397,
                                    "src": "13413:19:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view external returns (uint256)"
                                    }
                                  },
                                  "id": 7975,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "13413:21:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13405:7:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 7976,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13405:30:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13401:34:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 7978,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "13400:36:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7964,
                      "name": "calculateSaleReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4695,
                      "src": "13255:19:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint32,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13255:195:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7945,
                  "id": 7980,
                  "nodeType": "Return",
                  "src": "13236:214:25"
                }
              ]
            },
            "documentation": "@dev Current price of GD in `token`. currently only cDAI is supported.\n@param _token The desired reserve token to have\n@return price of GD",
            "id": 7982,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7941,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7938,
                    "src": "13044:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7942,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7940,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "13028:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13028:23:25"
              }
            ],
            "name": "currentPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7938,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7982,
                  "src": "12978:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7937,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "12978:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12977:14:25"
            },
            "returnParameters": {
              "id": 7945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7944,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7982,
                  "src": "13069:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13069:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13068:9:25"
            },
            "scope": 8274,
            "src": "12956:501:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8029,
              "nodeType": "Block",
              "src": "14174:363:25",
              "statements": [
                {
                  "assignments": [
                    7995
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7995,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 8029,
                      "src": "14184:21:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7994,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "14184:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8003,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7998,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "14227:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 7999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "14227:18:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8000,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14227:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 7997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14219:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14219:29:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7996,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "14208:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14208:41:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14184:65:25"
                },
                {
                  "assignments": [
                    8005
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8005,
                      "name": "decimalsDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 8029,
                      "src": "14259:20:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8004,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14259:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8016,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8011,
                                "name": "gooddollar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7995,
                                "src": "14306:10:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                  "typeString": "contract GoodDollar"
                                }
                              },
                              "id": 8012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3397,
                              "src": "14306:19:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 8013,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14306:21:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14298:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14298:30:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 8007,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14290:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            }
                          ],
                          "id": 8006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14282:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8008,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14282:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "14282:15:25",
                      "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": 8015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14282:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14259:70:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3130",
                          "id": 8024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14513:2:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8025,
                          "name": "decimalsDiff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8005,
                          "src": "14517:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14513:16:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8018,
                            "name": "_addTokenSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7986,
                            "src": "14470:15:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8020,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7984,
                                "src": "14500:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "id": 8019,
                              "name": "currentPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7982,
                              "src": "14487:12:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                                "typeString": "function (contract ERC20) view returns (uint256)"
                              }
                            },
                            "id": 8021,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14487:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8017,
                          "name": "rdiv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "14465:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 8022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14465:43:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "14465:47:25",
                      "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": 8027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14465:65:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7993,
                  "id": 8028,
                  "nodeType": "Return",
                  "src": "14458:72:25"
                }
              ]
            },
            "documentation": "@dev Calculates how much G$ to mint based on added token supply (from interest)\nand on current reserve ratio, in order to keep G$ price the same at the bonding curve\nformula to calculate the gd to mint: gd to mint =\naddreservebalance * (gdsupply / (reservebalance * reserveratio))\n@param _token the reserve token\n@param _addTokenSupply amount of token added to supply\n@return how much to mint in order to keep price in bonding curve the same",
            "id": 8030,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7989,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7984,
                    "src": "14136:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7990,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7988,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "14120:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14120:23:25"
              }
            ],
            "name": "calculateMintInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7984,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8030,
                  "src": "14045:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7983,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "14045:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7986,
                  "name": "_addTokenSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8030,
                  "src": "14059:23:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7985,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14059:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14044:39:25"
            },
            "returnParameters": {
              "id": 7993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7992,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8030,
                  "src": "14161:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7991,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14161:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14160:9:25"
            },
            "scope": 8274,
            "src": "14014:523:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8104,
              "nodeType": "Block",
              "src": "14946:649:25",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8041,
                      "name": "_addTokenSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8034,
                      "src": "14960:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8042,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14979:1:25",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14960:20:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8047,
                  "nodeType": "IfStatement",
                  "src": "14956:59:25",
                  "trueBody": {
                    "id": 8046,
                    "nodeType": "Block",
                    "src": "14982:33:25",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15003:1:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 8040,
                        "id": 8045,
                        "nodeType": "Return",
                        "src": "14996:8:25"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8049
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8049,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8104,
                      "src": "15024:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8048,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15024:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8054,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8051,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8032,
                        "src": "15063:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8052,
                        "name": "_addTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8034,
                        "src": "15071:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8050,
                      "name": "calculateMintInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8030,
                      "src": "15041:21:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) view returns (uint256)"
                      }
                    },
                    "id": 8053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15041:46:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15024:63:25"
                },
                {
                  "assignments": [
                    8056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8056,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 8104,
                      "src": "15097:33:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8055,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "15097:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8062,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8057,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "15133:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 8061,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8059,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8032,
                          "src": "15155:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 8058,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15147:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8060,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15147:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15133:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15097:66:25"
                },
                {
                  "assignments": [
                    8064
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8064,
                      "name": "gdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 8104,
                      "src": "15173:16:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8063,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15173:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8067,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8065,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8056,
                      "src": "15192:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 8066,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "gdSupply",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7398,
                    "src": "15192:21:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15173:40:25"
                },
                {
                  "assignments": [
                    8069
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8069,
                      "name": "reserveBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 8104,
                      "src": "15223:22:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8068,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15223:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8072,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8070,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8056,
                      "src": "15248:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 8071,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveSupply",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7394,
                    "src": "15248:26:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15223:51:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8073,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8056,
                        "src": "15284:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 8075,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "15284:21:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8078,
                          "name": "toMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8049,
                          "src": "15321:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8076,
                          "name": "gdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8064,
                          "src": "15308:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "15308:12:25",
                        "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": 8079,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15308:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15284:44:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8081,
                  "nodeType": "ExpressionStatement",
                  "src": "15284:44:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8082,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8056,
                        "src": "15338:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 8084,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7394,
                      "src": "15338:26:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8087,
                          "name": "_addTokenSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8034,
                          "src": "15386:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8085,
                          "name": "reserveBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8069,
                          "src": "15367:14:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "15367:18:25",
                        "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": 8088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15367:35:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15338:64:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8090,
                  "nodeType": "ExpressionStatement",
                  "src": "15338:64:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8092,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "15445:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8093,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "15445:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8095,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8032,
                            "src": "15477:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15469:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8096,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15469:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8097,
                        "name": "_addTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8034,
                        "src": "15498:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8098,
                        "name": "gdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8064,
                        "src": "15527:8:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8099,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8049,
                        "src": "15549:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8091,
                      "name": "InterestMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7437,
                      "src": "15417:14:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15417:148:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8101,
                  "nodeType": "EmitStatement",
                  "src": "15412:153:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8102,
                    "name": "toMint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8049,
                    "src": "15582:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8040,
                  "id": 8103,
                  "nodeType": "Return",
                  "src": "15575:13:25"
                }
              ]
            },
            "documentation": "@dev Updates bonding curve based on _addTokenSupply and new minted amount\n@param _token The reserve token\n@param _addTokenSupply Amount of token added to supply\n@return How much to mint in order to keep price in bonding curve the same",
            "id": 8105,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8037,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8036,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "14906:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14906:9:25"
              }
            ],
            "name": "mintInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8032,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8105,
                  "src": "14844:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8031,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "14844:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8034,
                  "name": "_addTokenSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8105,
                  "src": "14858:23:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8033,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14858:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14843:39:25"
            },
            "returnParameters": {
              "id": 8040,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8039,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8105,
                  "src": "14933:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8038,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14933:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14932:9:25"
            },
            "scope": 8274,
            "src": "14822:773:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8212,
              "nodeType": "Block",
              "src": "16157:969:25",
              "statements": [
                {
                  "assignments": [
                    8116
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8116,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16167:32:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8115,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "16167:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8122,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8117,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "16202:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 8121,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8119,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8107,
                          "src": "16224:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 8118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "16216:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8120,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16216:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16202:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16167:65:25"
                },
                {
                  "assignments": [
                    8124
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8124,
                      "name": "newReserveRatio",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16242:22:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 8123,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16242:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8128,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8126,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8107,
                        "src": "16292:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8125,
                      "name": "calculateNewReserveRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7598,
                      "src": "16267:24:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint32_$",
                        "typeString": "function (contract ERC20) view returns (uint32)"
                      }
                    },
                    "id": 8127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16267:32:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16242:57:25"
                },
                {
                  "assignments": [
                    8130
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8130,
                      "name": "reserveDecimalsDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16330:27:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8129,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16330:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8145,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8138,
                                        "name": "_token",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8107,
                                        "src": "16419:6:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$21849",
                                          "typeString": "contract ERC20"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ERC20_$21849",
                                          "typeString": "contract ERC20"
                                        }
                                      ],
                                      "id": 8137,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "16411:7:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 8139,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16411:15:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 8136,
                                  "name": "ERC20Detailed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21938,
                                  "src": "16397:13:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ERC20Detailed_$21938_$",
                                    "typeString": "type(contract ERC20Detailed)"
                                  }
                                },
                                "id": 8140,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16397:30:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20Detailed_$21938",
                                  "typeString": "contract ERC20Detailed"
                                }
                              },
                              "id": 8141,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21937,
                              "src": "16397:39:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                "typeString": "function () view external returns (uint8)"
                              }
                            },
                            "id": 8142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16397:41:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "3237",
                                "id": 8133,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16389:2:25",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_27_by_1",
                                  "typeString": "int_const 27"
                                },
                                "value": "27"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_27_by_1",
                                  "typeString": "int_const 27"
                                }
                              ],
                              "id": 8132,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16381:7:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 8134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16381:11:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21263,
                          "src": "16381:15:25",
                          "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": 8143,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16381:58:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8131,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16360:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 8144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16360:89:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16330:119:25"
                },
                {
                  "assignments": [
                    8147
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8147,
                      "name": "denom",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16491:13:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8146,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16491:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8164,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31653231",
                            "id": 8153,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16554:4:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                              "typeString": "int_const 1000000000000000000000"
                            },
                            "value": "1e21"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                              "typeString": "int_const 1000000000000000000000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8150,
                                "name": "newReserveRatio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8124,
                                "src": "16533:15:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 8149,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16525:7:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 8151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16525:24:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21215,
                          "src": "16525:28:25",
                          "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": 8154,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16525:34:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3130",
                              "id": 8159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16598:2:25",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_10_by_1",
                                "typeString": "int_const 10"
                              },
                              "value": "10"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "**",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 8160,
                              "name": "reserveDecimalsDiff",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8130,
                              "src": "16602:19:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "16598:23:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8156,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8107,
                                "src": "16586:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "id": 8155,
                              "name": "currentPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7982,
                              "src": "16573:12:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                                "typeString": "function (contract ERC20) view returns (uint256)"
                              }
                            },
                            "id": 8157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16573:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21215,
                          "src": "16573:24:25",
                          "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": 8162,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16573:49:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8148,
                      "name": "rmul",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 199,
                      "src": "16507:4:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16507:125:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16491:141:25"
                },
                {
                  "assignments": [
                    8166
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8166,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16695:21:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8165,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "16695:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8174,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8169,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "16738:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8170,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "16738:18:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16738:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16730:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16730:29:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8167,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "16719:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16719:41:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16695:65:25"
                },
                {
                  "assignments": [
                    8176
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8176,
                      "name": "gdDecimalsDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16770:22:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8175,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16770:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8187,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8182,
                                "name": "gooddollar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8166,
                                "src": "16819:10:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                  "typeString": "contract GoodDollar"
                                }
                              },
                              "id": 8183,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3397,
                              "src": "16819:19:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 8184,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16819:21:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16811:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16811:30:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 8178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16803:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            }
                          ],
                          "id": 8177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16795:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16795:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8180,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "16795:15:25",
                      "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": 8186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16795:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16770:72:25"
                },
                {
                  "assignments": [
                    8189
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8189,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16852:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8188,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16852:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8205,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3130",
                          "id": 8201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17024:2:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8202,
                          "name": "gdDecimalsDiff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8176,
                          "src": "17028:14:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17024:18:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3130",
                                  "id": 8194,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16918:2:25",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8195,
                                  "name": "reserveDecimalsDiff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8130,
                                  "src": "16922:19:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16918:23:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8191,
                                  "name": "reserveToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8116,
                                  "src": "16887:12:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                                    "typeString": "struct GoodMarketMaker.ReserveToken memory"
                                  }
                                },
                                "id": 8192,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "reserveSupply",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7394,
                                "src": "16887:26:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8193,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21215,
                              "src": "16887:30:25",
                              "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": 8197,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16887:55:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8198,
                            "name": "denom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8147,
                            "src": "16991:5:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8190,
                          "name": "rdiv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "16869:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 8199,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16869:137:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8200,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "16869:154:25",
                      "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": 8204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16869:174:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16852:191:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8208,
                          "name": "reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8116,
                          "src": "17097:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 8209,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "17097:21:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8206,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8189,
                        "src": "17086:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8207,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "17086:10:25",
                      "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": 8210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17086:33:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8114,
                  "id": 8211,
                  "nodeType": "Return",
                  "src": "17079:40:25"
                }
              ]
            },
            "documentation": "@dev Calculate how much G$ to mint based on expansion change (new reserve\nratio), in order to keep G$ price the same at the bonding curve. the\nformula to calculate the gd to mint: gd to mint =\n(reservebalance / (newreserveratio * currentprice)) - gdsupply\n@param _token The reserve token\n@return How much to mint in order to keep price in bonding curve the same",
            "id": 8213,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8110,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8107,
                    "src": "16119:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8111,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8109,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "16103:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16103:23:25"
              }
            ],
            "name": "calculateMintExpansion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8107,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8213,
                  "src": "16053:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8106,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "16053:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16052:14:25"
            },
            "returnParameters": {
              "id": 8114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8113,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8213,
                  "src": "16144:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8112,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16144:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16143:9:25"
            },
            "scope": 8274,
            "src": "16021:1105:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8272,
              "nodeType": "Block",
              "src": "17422:441:25",
              "statements": [
                {
                  "assignments": [
                    8223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8223,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8272,
                      "src": "17432:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17432:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8227,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8225,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8215,
                        "src": "17472:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8224,
                      "name": "calculateMintExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8213,
                      "src": "17449:22:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view returns (uint256)"
                      }
                    },
                    "id": 8226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17449:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17432:47:25"
                },
                {
                  "assignments": [
                    8229
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8229,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 8272,
                      "src": "17489:33:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8228,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "17489:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8235,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8230,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "17525:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 8234,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8232,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8215,
                          "src": "17547:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 8231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "17539:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17539:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17525:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17489:66:25"
                },
                {
                  "assignments": [
                    8237
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8237,
                      "name": "gdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 8272,
                      "src": "17565:16:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8236,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17565:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8240,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8238,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8229,
                      "src": "17584:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 8239,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "gdSupply",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7398,
                    "src": "17584:21:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17565:40:25"
                },
                {
                  "assignments": [
                    8242
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8242,
                      "name": "ratio",
                      "nodeType": "VariableDeclaration",
                      "scope": 8272,
                      "src": "17615:13:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8241,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17615:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8245,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8243,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8229,
                      "src": "17631:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 8244,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveRatio",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7396,
                    "src": "17631:25:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17615:41:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8246,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8229,
                        "src": "17666:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 8248,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "17666:21:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8251,
                          "name": "toMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "17703:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8249,
                          "name": "gdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8237,
                          "src": "17690:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "17690:12:25",
                        "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": 8252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17690:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17666:44:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8254,
                  "nodeType": "ExpressionStatement",
                  "src": "17666:44:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8256,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8215,
                        "src": "17739:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8255,
                      "name": "expandReserveRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7644,
                      "src": "17720:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$21849_$returns$_t_uint32_$",
                        "typeString": "function (contract ERC20) returns (uint32)"
                      }
                    },
                    "id": 8257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17720:26:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 8258,
                  "nodeType": "ExpressionStatement",
                  "src": "17720:26:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8260,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "17780:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17780:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8263,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8215,
                            "src": "17800:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17792:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17792:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8265,
                        "name": "ratio",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "17809:5:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8266,
                        "name": "gdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8237,
                        "src": "17816:8:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8267,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "17826:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8259,
                      "name": "UBIExpansionMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7449,
                      "src": "17761:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17761:72:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8269,
                  "nodeType": "EmitStatement",
                  "src": "17756:77:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8270,
                    "name": "toMint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8223,
                    "src": "17850:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8221,
                  "id": 8271,
                  "nodeType": "Return",
                  "src": "17843:13:25"
                }
              ]
            },
            "documentation": "@dev Updates bonding curve based on expansion change and new minted amount\n@param _token The reserve token\n@return How much to mint in order to keep price in bonding curve the same",
            "id": 8273,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8217,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "17394:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17394:9:25"
              }
            ],
            "name": "mintExpansion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8216,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8215,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8273,
                  "src": "17373:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8214,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "17373:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17372:14:25"
            },
            "returnParameters": {
              "id": 8221,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8220,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8273,
                  "src": "17413:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8219,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17413:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17412:9:25"
            },
            "scope": 8274,
            "src": "17350:513:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 8275,
        "src": "495:17370:25"
      }
    ],
    "src": "0:17866:25"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol",
    "exportedSymbols": {
      "GoodMarketMaker": [
        8274
      ]
    },
    "id": 8275,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7373,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:25"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 7374,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 21309,
        "src": "25:59:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 7375,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 21850,
        "src": "85:63:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol",
        "id": 7376,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 21939,
        "src": "149:71:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 7377,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 12706,
        "src": "221:55:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
        "file": "../../contracts/token/GoodDollar.sol",
        "id": 7378,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 3768,
        "src": "277:46:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol",
        "file": "../../contracts/dao/schemes/SchemeGuard.sol",
        "id": 7379,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 1424,
        "src": "324:53:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol",
        "file": "../../contracts/DSMath.sol",
        "id": 7380,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 304,
        "src": "378:36:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/BancorFormula.sol",
        "file": "./BancorFormula.sol",
        "id": 7381,
        "nodeType": "ImportDirective",
        "scope": 8275,
        "sourceUnit": 6618,
        "src": "415:29:25",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7382,
              "name": "BancorFormula",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6617,
              "src": "523:13:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BancorFormula_$6617",
                "typeString": "contract BancorFormula"
              }
            },
            "id": 7383,
            "nodeType": "InheritanceSpecifier",
            "src": "523:13:25"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7384,
              "name": "DSMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 303,
              "src": "538:6:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DSMath_$303",
                "typeString": "contract DSMath"
              }
            },
            "id": 7385,
            "nodeType": "InheritanceSpecifier",
            "src": "538:6:25"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7386,
              "name": "SchemeGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1423,
              "src": "546:11:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SchemeGuard_$1423",
                "typeString": "contract SchemeGuard"
              }
            },
            "id": 7387,
            "nodeType": "InheritanceSpecifier",
            "src": "546:11:25"
          }
        ],
        "contractDependencies": [
          303,
          1423,
          6617,
          21417
        ],
        "contractKind": "contract",
        "documentation": "@title Dynamic reserve ratio market maker",
        "fullyImplemented": true,
        "id": 8274,
        "linearizedBaseContracts": [
          8274,
          1423,
          21417,
          303,
          6617
        ],
        "name": "GoodMarketMaker",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7390,
            "libraryName": {
              "contractScope": null,
              "id": 7388,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "570:8:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "564:27:25",
            "typeName": {
              "id": 7389,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "583:7:25",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 7392,
            "name": "bancor",
            "nodeType": "VariableDeclaration",
            "scope": 8274,
            "src": "651:20:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_BancorFormula_$6617",
              "typeString": "contract BancorFormula"
            },
            "typeName": {
              "contractScope": null,
              "id": 7391,
              "name": "BancorFormula",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6617,
              "src": "651:13:25",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BancorFormula_$6617",
                "typeString": "contract BancorFormula"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "GoodMarketMaker.ReserveToken",
            "id": 7399,
            "members": [
              {
                "constant": false,
                "id": 7394,
                "name": "reserveSupply",
                "nodeType": "VariableDeclaration",
                "scope": 7399,
                "src": "840:21:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7393,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "840:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7396,
                "name": "reserveRatio",
                "nodeType": "VariableDeclaration",
                "scope": 7399,
                "src": "965:19:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 7395,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "965:6:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7398,
                "name": "gdSupply",
                "nodeType": "VariableDeclaration",
                "scope": 7399,
                "src": "1079:16:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7397,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1079:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ReserveToken",
            "nodeType": "StructDefinition",
            "scope": 8274,
            "src": "719:383:25",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7403,
            "name": "reserveTokens",
            "nodeType": "VariableDeclaration",
            "scope": 8274,
            "src": "1162:53:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
              "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken)"
            },
            "typeName": {
              "id": 7402,
              "keyType": {
                "id": 7400,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1170:7:25",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1162:32:25",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken)"
              },
              "valueType": {
                "contractScope": null,
                "id": 7401,
                "name": "ReserveToken",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7399,
                "src": "1181:12:25",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                  "typeString": "struct GoodMarketMaker.ReserveToken"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7417,
            "name": "BalancesUpdated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7405,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1417:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7404,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1417:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7407,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1493:28:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7406,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1493:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7409,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1562:14:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7408,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1562:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7411,
                  "indexed": false,
                  "name": "returnAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1614:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7410,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1614:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7413,
                  "indexed": false,
                  "name": "totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1680:19:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7412,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1680:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7415,
                  "indexed": false,
                  "name": "reserveBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 7417,
                  "src": "1748:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7414,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1748:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1359:417:25"
            },
            "src": "1338:439:25"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7425,
            "name": "ReserveRatioUpdated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7424,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7419,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7425,
                  "src": "1892:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1892:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7421,
                  "indexed": false,
                  "name": "nom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7425,
                  "src": "1916:11:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7420,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1916:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7423,
                  "indexed": false,
                  "name": "denom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7425,
                  "src": "1929:13:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7422,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1929:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1891:52:25"
            },
            "src": "1866:78:25"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7437,
            "name": "InterestMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7427,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2198:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7426,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7429,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2274:28:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7428,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2274:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7431,
                  "indexed": false,
                  "name": "addInterest",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2396:19:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2396:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7433,
                  "indexed": false,
                  "name": "oldSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2551:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2551:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7435,
                  "indexed": false,
                  "name": "mint",
                  "nodeType": "VariableDeclaration",
                  "scope": 7437,
                  "src": "2628:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2628:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2140:506:25"
            },
            "src": "2120:527:25"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7449,
            "name": "UBIExpansionMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7439,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "2987:22:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2987:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7441,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "3063:28:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3063:7:25",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7443,
                  "indexed": false,
                  "name": "oldReserveRatio",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "3151:23:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3151:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7445,
                  "indexed": false,
                  "name": "oldSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "3310:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7444,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3310:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7447,
                  "indexed": false,
                  "name": "mint",
                  "nodeType": "VariableDeclaration",
                  "scope": 7449,
                  "src": "3387:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7446,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3387:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2929:476:25"
            },
            "src": "2905:501:25"
          },
          {
            "constant": false,
            "id": 7451,
            "name": "reserveRatioDailyExpansion",
            "nodeType": "VariableDeclaration",
            "scope": 8274,
            "src": "3627:41:25",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 7450,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3627:7:25",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7470,
              "nodeType": "Block",
              "src": "4061:64:25",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7463,
                      "name": "reserveRatioDailyExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7451,
                      "src": "4071:26:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7465,
                          "name": "_nom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7455,
                          "src": "4105:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7466,
                          "name": "_denom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7457,
                          "src": "4111:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7464,
                        "name": "rdiv",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 247,
                        "src": "4100:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 7467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4100:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4071:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7469,
                  "nodeType": "ExpressionStatement",
                  "src": "4071:47:25"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param _avatar The avatar of the DAO\n@param _nom The numerator to calculate the global `reserveRatioDailyExpansion` from\n@param _denom The denominator to calculate the global `reserveRatioDailyExpansion` from",
            "id": 7471,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7460,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7453,
                    "src": "4052:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 7461,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7459,
                  "name": "SchemeGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1423,
                  "src": "4040:11:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_SchemeGuard_$1423_$",
                    "typeString": "type(contract SchemeGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4040:20:25"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7453,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7471,
                  "src": "3966:14:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7452,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "3966:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7455,
                  "name": "_nom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7471,
                  "src": "3990:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7454,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3990:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7457,
                  "name": "_denom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7471,
                  "src": "4012:14:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7456,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4012:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3956:76:25"
            },
            "returnParameters": {
              "id": 7462,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4061:0:25"
            },
            "scope": 8274,
            "src": "3945:180:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7492,
              "nodeType": "Block",
              "src": "4170:159:25",
              "statements": [
                {
                  "assignments": [
                    7476
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7476,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7492,
                      "src": "4180:27:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7475,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "4180:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7482,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7477,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "4210:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7481,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7479,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7473,
                          "src": "4232:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7478,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4224:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4224:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4210:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4180:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7484,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7476,
                            "src": "4258:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7485,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "4258:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4276:1:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4258:19:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5265736572766520746f6b656e206e6f7420696e697469616c697a6564",
                        "id": 7488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4279:31:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e4f47ee67cfd0c95fa58f901ff1f8dfb299fd997b46fb4779faf61670628ec93",
                          "typeString": "literal_string \"Reserve token not initialized\""
                        },
                        "value": "Reserve token not initialized"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e4f47ee67cfd0c95fa58f901ff1f8dfb299fd997b46fb4779faf61670628ec93",
                          "typeString": "literal_string \"Reserve token not initialized\""
                        }
                      ],
                      "id": 7483,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "4250:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4250:61:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7490,
                  "nodeType": "ExpressionStatement",
                  "src": "4250:61:25"
                },
                {
                  "id": 7491,
                  "nodeType": "PlaceholderStatement",
                  "src": "4321:1:25"
                }
              ]
            },
            "documentation": null,
            "id": 7493,
            "name": "onlyActiveToken",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7473,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7493,
                  "src": "4156:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7472,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "4156:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4155:14:25"
            },
            "src": "4131:198:25",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7523,
              "nodeType": "Block",
              "src": "4876:184:25",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7503,
                          "name": "_denom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7497,
                          "src": "4894:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4903:1:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4894:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "64656e6f6d696e61746f72206d7573742062652061626f76652030",
                        "id": 7506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4906:29:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1cf1150df689bda2eecea23ff11d17ee1261200b54b707a3861023c2a6a11f01",
                          "typeString": "literal_string \"denominator must be above 0\""
                        },
                        "value": "denominator must be above 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1cf1150df689bda2eecea23ff11d17ee1261200b54b707a3861023c2a6a11f01",
                          "typeString": "literal_string \"denominator must be above 0\""
                        }
                      ],
                      "id": 7502,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "4886:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4886:50:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7508,
                  "nodeType": "ExpressionStatement",
                  "src": "4886:50:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7509,
                      "name": "reserveRatioDailyExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7451,
                      "src": "4946:26:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7511,
                          "name": "_nom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7495,
                          "src": "4980:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7512,
                          "name": "_denom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7497,
                          "src": "4986:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7510,
                        "name": "rdiv",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 247,
                        "src": "4975:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 7513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4975:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4946:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7515,
                  "nodeType": "ExpressionStatement",
                  "src": "4946:47:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7517,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "5028:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5028:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7519,
                        "name": "_nom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7495,
                        "src": "5040:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7520,
                        "name": "_denom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7497,
                        "src": "5046:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7516,
                      "name": "ReserveRatioUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7425,
                      "src": "5008:19:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 7521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5008:45:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7522,
                  "nodeType": "EmitStatement",
                  "src": "5003:50:25"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the daily expansion rate\nit is calculated by _nom/_denom with e27 precision. Emits\n`ReserveRatioUpdated` event after the ratio has changed.\nOnly Avatar can call this method.\n@param _nom The numerator to calculate the global `reserveRatioDailyExpansion` from\n@param _denom The denominator to calculate the global `reserveRatioDailyExpansion` from",
            "id": 7524,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7500,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7499,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "4861:10:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4861:10:25"
              }
            ],
            "name": "setReserveRatioDailyExpansion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7498,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7495,
                  "name": "_nom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7524,
                  "src": "4808:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7494,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4808:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7497,
                  "name": "_denom",
                  "nodeType": "VariableDeclaration",
                  "scope": 7524,
                  "src": "4822:14:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7496,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4822:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4807:30:25"
            },
            "returnParameters": {
              "id": 7501,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4876:0:25"
            },
            "scope": 8274,
            "src": "4769:291:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7549,
              "nodeType": "Block",
              "src": "5860:189:25",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7537,
                        "name": "reserveTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7403,
                        "src": "5870:13:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                          "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                        }
                      },
                      "id": 7541,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7539,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7526,
                            "src": "5892:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 7538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5884:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5884:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5870:30:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7543,
                          "name": "_gdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7528,
                          "src": "5940:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7544,
                          "name": "_tokenSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7530,
                          "src": "5978:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7545,
                          "name": "_reserveRatio",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7532,
                          "src": "6018:13:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        ],
                        "id": 7542,
                        "name": "ReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7399,
                        "src": "5903:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_ReserveToken_$7399_storage_ptr_$",
                          "typeString": "type(struct GoodMarketMaker.ReserveToken storage pointer)"
                        }
                      },
                      "id": 7546,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "gdSupply",
                        "reserveSupply",
                        "reserveRatio"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "5903:139:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory",
                        "typeString": "struct GoodMarketMaker.ReserveToken memory"
                      }
                    },
                    "src": "5870:172:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "id": 7548,
                  "nodeType": "ExpressionStatement",
                  "src": "5870:172:25"
                }
              ]
            },
            "documentation": "@dev Initialize a reserve token entity with the given parameters\n@param _token The reserve token\n@param _gdSupply Initial supply of GD to set the price\n@param _tokenSupply Initial supply of reserve token to set the price\n@param _reserveRatio The starting reserve ratio",
            "id": 7550,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7535,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7534,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "5850:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5850:9:25"
              }
            ],
            "name": "initializeToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7526,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "5737:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7525,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "5737:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7528,
                  "name": "_gdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "5759:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7527,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5759:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7530,
                  "name": "_tokenSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "5786:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7529,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5786:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7532,
                  "name": "_reserveRatio",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "5816:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 7531,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5816:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5727:115:25"
            },
            "returnParameters": {
              "id": 7536,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5860:0:25"
            },
            "scope": 8274,
            "src": "5703:346:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7597,
              "nodeType": "Block",
              "src": "6435:460:25",
              "statements": [
                {
                  "assignments": [
                    7561
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7561,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7597,
                      "src": "6445:32:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7560,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "6445:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7567,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7562,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "6480:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7566,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7564,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7552,
                          "src": "6502:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6494:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6494:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6480:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6445:65:25"
                },
                {
                  "assignments": [
                    7569
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7569,
                      "name": "ratio",
                      "nodeType": "VariableDeclaration",
                      "scope": 7597,
                      "src": "6520:12:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 7568,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6520:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7572,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7570,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7561,
                      "src": "6535:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken memory"
                      }
                    },
                    "id": 7571,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveRatio",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7396,
                    "src": "6535:25:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6520:40:25"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 7575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7573,
                      "name": "ratio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7569,
                      "src": "6574:5:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6583:1:25",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6574:10:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7581,
                  "nodeType": "IfStatement",
                  "src": "6570:52:25",
                  "trueBody": {
                    "id": 7580,
                    "nodeType": "Block",
                    "src": "6586:36:25",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7576,
                            "name": "ratio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7569,
                            "src": "6600:5:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "316536",
                            "id": 7577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6608:3:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000_by_1",
                              "typeString": "int_const 1000000"
                            },
                            "value": "1e6"
                          },
                          "src": "6600:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 7579,
                        "nodeType": "ExpressionStatement",
                        "src": "6600:11:25"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31653231",
                            "id": 7593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6843:4:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                              "typeString": "int_const 1000000000000000000000"
                            },
                            "value": "1e21"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                              "typeString": "int_const 1000000000000000000000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31653231",
                                    "id": 7588,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6719:4:25",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                                      "typeString": "int_const 1000000000000000000000"
                                    },
                                    "value": "1e21"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                                      "typeString": "int_const 1000000000000000000000"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 7585,
                                        "name": "ratio",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7569,
                                        "src": "6708:5:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      ],
                                      "id": 7584,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "6700:7:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint256"
                                    },
                                    "id": 7586,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6700:14:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7587,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21215,
                                  "src": "6700:18:25",
                                  "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": 7589,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6700:24:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 7590,
                                "name": "reserveRatioDailyExpansion",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7451,
                                "src": "6773:26:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7583,
                              "name": "rmul",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 199,
                              "src": "6674:4:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7591,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6674:143:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21239,
                          "src": "6674:168:25",
                          "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": 7594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6674:174:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6650:6:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint32_$",
                        "typeString": "type(uint32)"
                      },
                      "typeName": "uint32"
                    },
                    "id": 7595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6650:238:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 7559,
                  "id": 7596,
                  "nodeType": "Return",
                  "src": "6631:257:25"
                }
              ]
            },
            "documentation": "@dev Calculates how much to decrease the reserve ratio for _token by\nthe `reserveRatioDailyExpansion`\n@param _token The reserve token to calculate the reserve ratio for\n@return The new reserve ratio",
            "id": 7598,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7555,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7552,
                    "src": "6398:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7556,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7554,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "6382:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6382:23:25"
              }
            ],
            "name": "calculateNewReserveRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7552,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7598,
                  "src": "6332:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7551,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "6332:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6331:14:25"
            },
            "returnParameters": {
              "id": 7559,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7558,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7598,
                  "src": "6423:6:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 7557,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6423:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6422:8:25"
            },
            "scope": 8274,
            "src": "6298:597:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7643,
              "nodeType": "Block",
              "src": "7240:306:25",
              "statements": [
                {
                  "assignments": [
                    7611
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7611,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7643,
                      "src": "7250:33:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7610,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "7250:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7617,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7612,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "7286:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7616,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7614,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7600,
                          "src": "7308:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7300:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7615,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7300:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7286:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7250:66:25"
                },
                {
                  "assignments": [
                    7619
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7619,
                      "name": "ratio",
                      "nodeType": "VariableDeclaration",
                      "scope": 7643,
                      "src": "7326:12:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 7618,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7326:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7622,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7620,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7611,
                      "src": "7341:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 7621,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveRatio",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7396,
                    "src": "7341:25:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7326:40:25"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 7625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7623,
                      "name": "ratio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7619,
                      "src": "7380:5:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7389:1:25",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7380:10:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7631,
                  "nodeType": "IfStatement",
                  "src": "7376:52:25",
                  "trueBody": {
                    "id": 7630,
                    "nodeType": "Block",
                    "src": "7392:36:25",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7626,
                            "name": "ratio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7619,
                            "src": "7406:5:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "316536",
                            "id": 7627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7414:3:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000_by_1",
                              "typeString": "int_const 1000000"
                            },
                            "value": "1e6"
                          },
                          "src": "7406:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 7629,
                        "nodeType": "ExpressionStatement",
                        "src": "7406:11:25"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7632,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7611,
                        "src": "7437:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7634,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveRatio",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7396,
                      "src": "7437:25:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7636,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7600,
                          "src": "7490:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7635,
                        "name": "calculateNewReserveRatio",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7598,
                        "src": "7465:24:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint32_$",
                          "typeString": "function (contract ERC20) view returns (uint32)"
                        }
                      },
                      "id": 7637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7465:32:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "7437:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 7639,
                  "nodeType": "ExpressionStatement",
                  "src": "7437:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7640,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7611,
                      "src": "7514:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 7641,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveRatio",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7396,
                    "src": "7514:25:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 7609,
                  "id": 7642,
                  "nodeType": "Return",
                  "src": "7507:32:25"
                }
              ]
            },
            "documentation": "@dev Decreases the reserve ratio for _token by the `reserveRatioDailyExpansion`\n@param _token The token to change the reserve ratio for\n@return The new reserve ratio",
            "id": 7644,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7603,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7602,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "7169:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7169:9:25"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7605,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7600,
                    "src": "7203:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7606,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7604,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "7187:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7187:23:25"
              }
            ],
            "name": "expandReserveRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7601,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7600,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7644,
                  "src": "7132:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7599,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "7132:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7131:14:25"
            },
            "returnParameters": {
              "id": 7609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7608,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7644,
                  "src": "7228:6:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 7607,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7228:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7227:8:25"
            },
            "scope": 8274,
            "src": "7104:442:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7674,
              "nodeType": "Block",
              "src": "8007:280:25",
              "statements": [
                {
                  "assignments": [
                    7657
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7657,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7674,
                      "src": "8017:26:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7656,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "8017:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7663,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7658,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "8046:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7662,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7660,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7646,
                          "src": "8068:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7659,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8060:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7661,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8060:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8046:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8017:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7665,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7657,
                          "src": "8146:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7666,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "8146:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7667,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7657,
                          "src": "8179:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7668,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "8179:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7669,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7657,
                          "src": "8217:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7670,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveRatio",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7396,
                        "src": "8217:19:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7671,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7648,
                        "src": "8254:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7664,
                      "name": "calculatePurchaseReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4593,
                      "src": "8105:23:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint32,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8105:175:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7655,
                  "id": 7673,
                  "nodeType": "Return",
                  "src": "8086:194:25"
                }
              ]
            },
            "documentation": "@dev Calculates the buy return in GD according to the given _tokenAmount\n@param _token The reserve token buying with\n@param _tokenAmount The amount of reserve token buying with\n@return Number of GD that should be given in exchange as calculated by the bonding curve",
            "id": 7675,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7651,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7646,
                    "src": "7969:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7652,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7650,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "7953:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7953:23:25"
              }
            ],
            "name": "buyReturn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7649,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7646,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7675,
                  "src": "7881:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7645,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "7881:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7648,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7675,
                  "src": "7895:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7647,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7895:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7880:36:25"
            },
            "returnParameters": {
              "id": 7655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7654,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7675,
                  "src": "7994:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7653,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7994:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7993:9:25"
            },
            "scope": 8274,
            "src": "7862:425:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7705,
              "nodeType": "Block",
              "src": "8744:273:25",
              "statements": [
                {
                  "assignments": [
                    7688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7688,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7705,
                      "src": "8754:26:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7687,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "8754:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7694,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7689,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "8783:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7693,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7691,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7677,
                          "src": "8805:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8797:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8797:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8783:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8754:59:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7696,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7688,
                          "src": "8879:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7697,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "8879:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7698,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7688,
                          "src": "8912:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7699,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "8912:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7700,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7688,
                          "src": "8950:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7701,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveRatio",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7396,
                        "src": "8950:19:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7702,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7679,
                        "src": "8987:9:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7695,
                      "name": "calculateSaleReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4695,
                      "src": "8842:19:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint32,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8842:168:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7686,
                  "id": 7704,
                  "nodeType": "Return",
                  "src": "8823:187:25"
                }
              ]
            },
            "documentation": "@dev Calculates the sell return in _token according to the given _gdAmount\n@param _token The desired reserve token to have\n@param _gdAmount The amount of GD that are sold\n@return Number of tokens that should be given in exchange as calculated by the bonding curve",
            "id": 7706,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7682,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7677,
                    "src": "8706:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7683,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7681,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "8690:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8690:23:25"
              }
            ],
            "name": "sellReturn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7677,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7706,
                  "src": "8621:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7676,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "8621:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7679,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7706,
                  "src": "8635:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7678,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8635:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8620:33:25"
            },
            "returnParameters": {
              "id": 7686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7685,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7706,
                  "src": "8731:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7684,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8731:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8730:9:25"
            },
            "scope": 8274,
            "src": "8601:416:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7771,
              "nodeType": "Block",
              "src": "9530:494:25",
              "statements": [
                {
                  "assignments": [
                    7721
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7721,
                      "name": "gdReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 7771,
                      "src": "9540:16:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7720,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9540:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7726,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7723,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7708,
                        "src": "9569:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7724,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7710,
                        "src": "9577:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7722,
                      "name": "buyReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7675,
                      "src": "9559:9:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9559:31:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9540:50:25"
                },
                {
                  "assignments": [
                    7728
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7728,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7771,
                      "src": "9600:27:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7727,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "9600:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7734,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7729,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "9630:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7733,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7731,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7708,
                          "src": "9652:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7730,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "9644:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9644:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9630:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9600:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7735,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7728,
                        "src": "9670:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7737,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "9670:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7741,
                          "name": "gdReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7721,
                          "src": "9708:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7738,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7728,
                            "src": "9688:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7739,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "9688:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "9688:19:25",
                        "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": 7742,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9688:29:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9670:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7744,
                  "nodeType": "ExpressionStatement",
                  "src": "9670:47:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7745,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7728,
                        "src": "9727:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7747,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7394,
                      "src": "9727:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7751,
                          "name": "_tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7710,
                          "src": "9775:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7748,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7728,
                            "src": "9750:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7749,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reserveSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7394,
                          "src": "9750:20:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "9750:24:25",
                        "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": 7752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9750:38:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9727:61:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7754,
                  "nodeType": "ExpressionStatement",
                  "src": "9727:61:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7756,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9832:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9832:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7759,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7708,
                            "src": "9864:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 7758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9856:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9856:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7761,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7710,
                        "src": "9885:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7762,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7721,
                        "src": "9911:8:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7763,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7728,
                          "src": "9933:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7764,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "9933:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7765,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7728,
                          "src": "9962:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7766,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "9962:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7755,
                      "name": "BalancesUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7417,
                      "src": "9803:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9803:189:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7768,
                  "nodeType": "EmitStatement",
                  "src": "9798:194:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7769,
                    "name": "gdReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7721,
                    "src": "10009:8:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7719,
                  "id": 7770,
                  "nodeType": "Return",
                  "src": "10002:15:25"
                }
              ]
            },
            "documentation": "@dev Updates the _token bonding curve params. Emits `BalancesUpdated` with the\nnew reserve token information.\n@param _token The reserve token buying with\n@param _tokenAmount The amount of reserve token buying with\n@return (gdReturn) Number of GD that will be given in exchange as calculated by the bonding curve",
            "id": 7772,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7713,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7712,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "9458:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9458:9:25"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7715,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7708,
                    "src": "9492:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7716,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7714,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "9476:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9476:23:25"
              }
            ],
            "name": "buy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7711,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7708,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7772,
                  "src": "9399:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7707,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "9399:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7710,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7772,
                  "src": "9413:20:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7709,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9413:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9398:36:25"
            },
            "returnParameters": {
              "id": 7719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7718,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7772,
                  "src": "9517:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9517:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9516:9:25"
            },
            "scope": 8274,
            "src": "9386:638:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7845,
              "nodeType": "Block",
              "src": "10520:589:25",
              "statements": [
                {
                  "assignments": [
                    7787
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7787,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7845,
                      "src": "10530:27:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7786,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "10530:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7793,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7788,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "10560:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7792,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7790,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7774,
                          "src": "10582:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10574:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7791,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10574:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10560:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10530:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7798,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7795,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7787,
                            "src": "10608:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7796,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "10608:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7797,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7776,
                          "src": "10626:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10608:27:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "474420616d6f756e7420697320686967686572207468616e2074686520746f74616c20737570706c79",
                        "id": 7799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10637:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_34611db31e8463578e00b4b067aff93f2ff0d183c2c0e2e1843ad2d0b6427aae",
                          "typeString": "literal_string \"GD amount is higher than the total supply\""
                        },
                        "value": "GD amount is higher than the total supply"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_34611db31e8463578e00b4b067aff93f2ff0d183c2c0e2e1843ad2d0b6427aae",
                          "typeString": "literal_string \"GD amount is higher than the total supply\""
                        }
                      ],
                      "id": 7794,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10600:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10600:81:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7801,
                  "nodeType": "ExpressionStatement",
                  "src": "10600:81:25"
                },
                {
                  "assignments": [
                    7803
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7803,
                      "name": "tokenReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 7845,
                      "src": "10691:19:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7802,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10691:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7808,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7805,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7774,
                        "src": "10724:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7806,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7776,
                        "src": "10732:9:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7804,
                      "name": "sellReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7706,
                      "src": "10713:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10713:29:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10691:51:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7809,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7787,
                        "src": "10752:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7811,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "10752:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7815,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7776,
                          "src": "10790:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7812,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7787,
                            "src": "10770:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7813,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "10770:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21263,
                        "src": "10770:19:25",
                        "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": 7816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10770:30:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10752:48:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7818,
                  "nodeType": "ExpressionStatement",
                  "src": "10752:48:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7819,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7787,
                        "src": "10810:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7821,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7394,
                      "src": "10810:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7825,
                          "name": "tokenReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7803,
                          "src": "10858:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7822,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7787,
                            "src": "10833:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7823,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reserveSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7394,
                          "src": "10833:20:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21263,
                        "src": "10833:24:25",
                        "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": 7826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10833:37:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10810:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7828,
                  "nodeType": "ExpressionStatement",
                  "src": "10810:60:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7830,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10914:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10914:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7833,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7774,
                            "src": "10946:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 7832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10938:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10938:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7835,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7776,
                        "src": "10967:9:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7836,
                        "name": "tokenReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7803,
                        "src": "10990:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7837,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7787,
                          "src": "11015:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7838,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "11015:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7839,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7787,
                          "src": "11044:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7840,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "11044:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7829,
                      "name": "BalancesUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7417,
                      "src": "10885:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10885:189:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7842,
                  "nodeType": "EmitStatement",
                  "src": "10880:194:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7843,
                    "name": "tokenReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7803,
                    "src": "11091:11:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7785,
                  "id": 7844,
                  "nodeType": "Return",
                  "src": "11084:18:25"
                }
              ]
            },
            "documentation": "@dev Updates the _token bonding curve params. Emits `BalancesUpdated` with the\nnew reserve token information.\n@param _token The desired reserve token to have\n@param _gdAmount The amount of GD that are sold\n@return Number of tokens that will be given in exchange as calculated by the bonding curve",
            "id": 7846,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7779,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7778,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "10448:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10448:9:25"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7781,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7774,
                    "src": "10482:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7782,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7780,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "10466:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10466:23:25"
              }
            ],
            "name": "sell",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7774,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7846,
                  "src": "10392:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7773,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "10392:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7776,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7846,
                  "src": "10406:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7775,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10406:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10391:33:25"
            },
            "returnParameters": {
              "id": 7785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7784,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7846,
                  "src": "10507:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10507:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10506:9:25"
            },
            "scope": 8274,
            "src": "10378:731:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7935,
              "nodeType": "Block",
              "src": "11803:971:25",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7863,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7850,
                          "src": "11834:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7864,
                          "name": "_contributionGdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7852,
                          "src": "11847:21:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11834:34:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "474420616d6f756e74206973206c6f776572207468616e2074686520636f6e747269627574696f6e20616d6f756e74",
                        "id": 7866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11882:49:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_94166c863d1852d5565ab4465c9748e8eef8644b04466a9cb31548631469d799",
                          "typeString": "literal_string \"GD amount is lower than the contribution amount\""
                        },
                        "value": "GD amount is lower than the contribution amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_94166c863d1852d5565ab4465c9748e8eef8644b04466a9cb31548631469d799",
                          "typeString": "literal_string \"GD amount is lower than the contribution amount\""
                        }
                      ],
                      "id": 7862,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "11813:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11813:128:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7868,
                  "nodeType": "ExpressionStatement",
                  "src": "11813:128:25"
                },
                {
                  "assignments": [
                    7870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7870,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7935,
                      "src": "11951:27:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7869,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "11951:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7876,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7871,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "11981:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7875,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7873,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7848,
                          "src": "12003:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7872,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11995:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11995:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11981:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11951:60:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7878,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7870,
                            "src": "12029:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7879,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "12029:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7880,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7850,
                          "src": "12047:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12029:27:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "474420616d6f756e7420697320686967686572207468616e2074686520746f74616c20737570706c79",
                        "id": 7882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12058:43:25",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_34611db31e8463578e00b4b067aff93f2ff0d183c2c0e2e1843ad2d0b6427aae",
                          "typeString": "literal_string \"GD amount is higher than the total supply\""
                        },
                        "value": "GD amount is higher than the total supply"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_34611db31e8463578e00b4b067aff93f2ff0d183c2c0e2e1843ad2d0b6427aae",
                          "typeString": "literal_string \"GD amount is higher than the total supply\""
                        }
                      ],
                      "id": 7877,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "12021:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12021:81:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7884,
                  "nodeType": "ExpressionStatement",
                  "src": "12021:81:25"
                },
                {
                  "assignments": [
                    7886
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7886,
                      "name": "amountAfterContribution",
                      "nodeType": "VariableDeclaration",
                      "scope": 7935,
                      "src": "12201:31:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7885,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12201:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7891,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7889,
                        "name": "_contributionGdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7852,
                        "src": "12249:21:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7887,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7850,
                        "src": "12235:9:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7888,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "12235:13:25",
                      "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": 7890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12235:36:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12201:70:25"
                },
                {
                  "assignments": [
                    7893
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7893,
                      "name": "tokenReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 7935,
                      "src": "12330:19:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7892,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12330:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7898,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7895,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7848,
                        "src": "12363:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7896,
                        "name": "amountAfterContribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7886,
                        "src": "12371:23:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7894,
                      "name": "sellReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7706,
                      "src": "12352:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12352:43:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12330:65:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7899,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7870,
                        "src": "12405:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7901,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "12405:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7905,
                          "name": "_gdAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7850,
                          "src": "12443:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7902,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7870,
                            "src": "12423:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7903,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "gdSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7398,
                          "src": "12423:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21263,
                        "src": "12423:19:25",
                        "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": 7906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12423:30:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12405:48:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7908,
                  "nodeType": "ExpressionStatement",
                  "src": "12405:48:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7909,
                        "name": "rtoken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7870,
                        "src": "12463:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 7911,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7394,
                      "src": "12463:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7915,
                          "name": "tokenReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7893,
                          "src": "12511:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7912,
                            "name": "rtoken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7870,
                            "src": "12486:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                              "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                            }
                          },
                          "id": 7913,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reserveSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7394,
                          "src": "12486:20:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7914,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21263,
                        "src": "12486:24:25",
                        "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": 7916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12486:37:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12463:60:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7918,
                  "nodeType": "ExpressionStatement",
                  "src": "12463:60:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7920,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "12567:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7921,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "12567:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7923,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7848,
                            "src": "12599:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 7922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12591:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12591:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7925,
                        "name": "_contributionGdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7852,
                        "src": "12620:21:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7926,
                        "name": "tokenReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7893,
                        "src": "12655:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7927,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7870,
                          "src": "12680:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7928,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "12680:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7929,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7870,
                          "src": "12709:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                          }
                        },
                        "id": 7930,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "12709:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7919,
                      "name": "BalancesUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7417,
                      "src": "12538:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12538:201:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7932,
                  "nodeType": "EmitStatement",
                  "src": "12533:206:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7933,
                    "name": "tokenReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7893,
                    "src": "12756:11:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7861,
                  "id": 7934,
                  "nodeType": "Return",
                  "src": "12749:18:25"
                }
              ]
            },
            "documentation": "@dev Calculates the sell return with contribution in _token and update the bonding curve params.\nEmits `BalancesUpdated` with the new reserve token information.\n@param _token The desired reserve token to have\n@param _gdAmount The amount of GD that are sold\n@param _contributionGdAmount The number of GD tokens that will not be traded for the reserve token\n@return Number of tokens that will be given in exchange as calculated by the bonding curve",
            "id": 7936,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7855,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7854,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "11751:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11751:9:25"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7857,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7848,
                    "src": "11777:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7858,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7856,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "11761:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11761:23:25"
              }
            ],
            "name": "sellWithContribution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7848,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7936,
                  "src": "11659:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7847,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "11659:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7850,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7936,
                  "src": "11681:17:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7849,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11681:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7852,
                  "name": "_contributionGdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7936,
                  "src": "11708:29:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11708:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11649:94:25"
            },
            "returnParameters": {
              "id": 7861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7860,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7936,
                  "src": "11794:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7859,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11794:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11793:9:25"
            },
            "scope": 8274,
            "src": "11620:1154:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7981,
              "nodeType": "Block",
              "src": "13082:375:25",
              "statements": [
                {
                  "assignments": [
                    7947
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7947,
                      "name": "rtoken",
                      "nodeType": "VariableDeclaration",
                      "scope": 7981,
                      "src": "13092:26:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7946,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "13092:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7953,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7948,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "13121:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 7952,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7950,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7938,
                          "src": "13143:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 7949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13135:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13135:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13121:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13092:59:25"
                },
                {
                  "assignments": [
                    7955
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7955,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 7981,
                      "src": "13161:21:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7954,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "13161:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7963,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7958,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "13204:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 7959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "13204:18:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 7960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13204:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 7957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13196:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13196:29:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7956,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "13185:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 7962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13185:41:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13161:65:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7965,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "13292:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7966,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "13292:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7967,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "13325:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7968,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7394,
                        "src": "13325:20:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7969,
                          "name": "rtoken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "13363:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 7970,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reserveRatio",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7396,
                        "src": "13363:19:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7977,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3130",
                              "id": 7971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13401:2:25",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_10_by_1",
                                "typeString": "int_const 10"
                              },
                              "value": "10"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "**",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7973,
                                      "name": "gooddollar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7955,
                                      "src": "13413:10:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                        "typeString": "contract GoodDollar"
                                      }
                                    },
                                    "id": 7974,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "decimals",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3397,
                                    "src": "13413:19:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view external returns (uint256)"
                                    }
                                  },
                                  "id": 7975,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "13413:21:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13405:7:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 7976,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13405:30:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13401:34:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 7978,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "13400:36:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7964,
                      "name": "calculateSaleReturn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4695,
                      "src": "13255:19:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint32,uint256) view returns (uint256)"
                      }
                    },
                    "id": 7979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13255:195:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7945,
                  "id": 7980,
                  "nodeType": "Return",
                  "src": "13236:214:25"
                }
              ]
            },
            "documentation": "@dev Current price of GD in `token`. currently only cDAI is supported.\n@param _token The desired reserve token to have\n@return price of GD",
            "id": 7982,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7941,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7938,
                    "src": "13044:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7942,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7940,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "13028:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13028:23:25"
              }
            ],
            "name": "currentPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7938,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 7982,
                  "src": "12978:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7937,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "12978:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12977:14:25"
            },
            "returnParameters": {
              "id": 7945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7944,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7982,
                  "src": "13069:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13069:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13068:9:25"
            },
            "scope": 8274,
            "src": "12956:501:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8029,
              "nodeType": "Block",
              "src": "14174:363:25",
              "statements": [
                {
                  "assignments": [
                    7995
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7995,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 8029,
                      "src": "14184:21:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7994,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "14184:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8003,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7998,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "14227:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 7999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "14227:18:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8000,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14227:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 7997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14219:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14219:29:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7996,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "14208:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14208:41:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14184:65:25"
                },
                {
                  "assignments": [
                    8005
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8005,
                      "name": "decimalsDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 8029,
                      "src": "14259:20:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8004,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14259:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8016,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8011,
                                "name": "gooddollar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7995,
                                "src": "14306:10:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                  "typeString": "contract GoodDollar"
                                }
                              },
                              "id": 8012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3397,
                              "src": "14306:19:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 8013,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14306:21:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14298:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14298:30:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 8007,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14290:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            }
                          ],
                          "id": 8006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14282:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8008,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14282:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "14282:15:25",
                      "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": 8015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14282:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14259:70:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3130",
                          "id": 8024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14513:2:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8025,
                          "name": "decimalsDiff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8005,
                          "src": "14517:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14513:16:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8018,
                            "name": "_addTokenSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7986,
                            "src": "14470:15:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8020,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7984,
                                "src": "14500:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "id": 8019,
                              "name": "currentPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7982,
                              "src": "14487:12:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                                "typeString": "function (contract ERC20) view returns (uint256)"
                              }
                            },
                            "id": 8021,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14487:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8017,
                          "name": "rdiv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "14465:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 8022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14465:43:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "14465:47:25",
                      "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": 8027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14465:65:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7993,
                  "id": 8028,
                  "nodeType": "Return",
                  "src": "14458:72:25"
                }
              ]
            },
            "documentation": "@dev Calculates how much G$ to mint based on added token supply (from interest)\nand on current reserve ratio, in order to keep G$ price the same at the bonding curve\nformula to calculate the gd to mint: gd to mint =\naddreservebalance * (gdsupply / (reservebalance * reserveratio))\n@param _token the reserve token\n@param _addTokenSupply amount of token added to supply\n@return how much to mint in order to keep price in bonding curve the same",
            "id": 8030,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7989,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7984,
                    "src": "14136:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 7990,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7988,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "14120:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14120:23:25"
              }
            ],
            "name": "calculateMintInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7984,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8030,
                  "src": "14045:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7983,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "14045:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7986,
                  "name": "_addTokenSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8030,
                  "src": "14059:23:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7985,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14059:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14044:39:25"
            },
            "returnParameters": {
              "id": 7993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7992,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8030,
                  "src": "14161:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7991,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14161:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14160:9:25"
            },
            "scope": 8274,
            "src": "14014:523:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8104,
              "nodeType": "Block",
              "src": "14946:649:25",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8041,
                      "name": "_addTokenSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8034,
                      "src": "14960:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8042,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14979:1:25",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14960:20:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8047,
                  "nodeType": "IfStatement",
                  "src": "14956:59:25",
                  "trueBody": {
                    "id": 8046,
                    "nodeType": "Block",
                    "src": "14982:33:25",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15003:1:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 8040,
                        "id": 8045,
                        "nodeType": "Return",
                        "src": "14996:8:25"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8049
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8049,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8104,
                      "src": "15024:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8048,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15024:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8054,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8051,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8032,
                        "src": "15063:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8052,
                        "name": "_addTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8034,
                        "src": "15071:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8050,
                      "name": "calculateMintInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8030,
                      "src": "15041:21:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) view returns (uint256)"
                      }
                    },
                    "id": 8053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15041:46:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15024:63:25"
                },
                {
                  "assignments": [
                    8056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8056,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 8104,
                      "src": "15097:33:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8055,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "15097:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8062,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8057,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "15133:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 8061,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8059,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8032,
                          "src": "15155:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 8058,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15147:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8060,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15147:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15133:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15097:66:25"
                },
                {
                  "assignments": [
                    8064
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8064,
                      "name": "gdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 8104,
                      "src": "15173:16:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8063,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15173:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8067,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8065,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8056,
                      "src": "15192:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 8066,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "gdSupply",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7398,
                    "src": "15192:21:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15173:40:25"
                },
                {
                  "assignments": [
                    8069
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8069,
                      "name": "reserveBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 8104,
                      "src": "15223:22:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8068,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15223:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8072,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8070,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8056,
                      "src": "15248:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 8071,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveSupply",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7394,
                    "src": "15248:26:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15223:51:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8073,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8056,
                        "src": "15284:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 8075,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "15284:21:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8078,
                          "name": "toMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8049,
                          "src": "15321:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8076,
                          "name": "gdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8064,
                          "src": "15308:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "15308:12:25",
                        "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": 8079,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15308:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15284:44:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8081,
                  "nodeType": "ExpressionStatement",
                  "src": "15284:44:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8082,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8056,
                        "src": "15338:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 8084,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reserveSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7394,
                      "src": "15338:26:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8087,
                          "name": "_addTokenSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8034,
                          "src": "15386:15:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8085,
                          "name": "reserveBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8069,
                          "src": "15367:14:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "15367:18:25",
                        "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": 8088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15367:35:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15338:64:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8090,
                  "nodeType": "ExpressionStatement",
                  "src": "15338:64:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8092,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "15445:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8093,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "15445:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8095,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8032,
                            "src": "15477:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15469:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8096,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15469:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8097,
                        "name": "_addTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8034,
                        "src": "15498:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8098,
                        "name": "gdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8064,
                        "src": "15527:8:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8099,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8049,
                        "src": "15549:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8091,
                      "name": "InterestMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7437,
                      "src": "15417:14:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15417:148:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8101,
                  "nodeType": "EmitStatement",
                  "src": "15412:153:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8102,
                    "name": "toMint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8049,
                    "src": "15582:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8040,
                  "id": 8103,
                  "nodeType": "Return",
                  "src": "15575:13:25"
                }
              ]
            },
            "documentation": "@dev Updates bonding curve based on _addTokenSupply and new minted amount\n@param _token The reserve token\n@param _addTokenSupply Amount of token added to supply\n@return How much to mint in order to keep price in bonding curve the same",
            "id": 8105,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8037,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8036,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "14906:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14906:9:25"
              }
            ],
            "name": "mintInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8032,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8105,
                  "src": "14844:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8031,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "14844:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8034,
                  "name": "_addTokenSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8105,
                  "src": "14858:23:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8033,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14858:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14843:39:25"
            },
            "returnParameters": {
              "id": 8040,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8039,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8105,
                  "src": "14933:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8038,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14933:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14932:9:25"
            },
            "scope": 8274,
            "src": "14822:773:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8212,
              "nodeType": "Block",
              "src": "16157:969:25",
              "statements": [
                {
                  "assignments": [
                    8116
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8116,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16167:32:25",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8115,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "16167:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8122,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8117,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "16202:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 8121,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8119,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8107,
                          "src": "16224:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 8118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "16216:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8120,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16216:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16202:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16167:65:25"
                },
                {
                  "assignments": [
                    8124
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8124,
                      "name": "newReserveRatio",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16242:22:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 8123,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16242:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8128,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8126,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8107,
                        "src": "16292:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8125,
                      "name": "calculateNewReserveRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7598,
                      "src": "16267:24:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint32_$",
                        "typeString": "function (contract ERC20) view returns (uint32)"
                      }
                    },
                    "id": 8127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16267:32:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16242:57:25"
                },
                {
                  "assignments": [
                    8130
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8130,
                      "name": "reserveDecimalsDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16330:27:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8129,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16330:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8145,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8138,
                                        "name": "_token",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8107,
                                        "src": "16419:6:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$21849",
                                          "typeString": "contract ERC20"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ERC20_$21849",
                                          "typeString": "contract ERC20"
                                        }
                                      ],
                                      "id": 8137,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "16411:7:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 8139,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16411:15:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 8136,
                                  "name": "ERC20Detailed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21938,
                                  "src": "16397:13:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ERC20Detailed_$21938_$",
                                    "typeString": "type(contract ERC20Detailed)"
                                  }
                                },
                                "id": 8140,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16397:30:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20Detailed_$21938",
                                  "typeString": "contract ERC20Detailed"
                                }
                              },
                              "id": 8141,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21937,
                              "src": "16397:39:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                "typeString": "function () view external returns (uint8)"
                              }
                            },
                            "id": 8142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16397:41:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "3237",
                                "id": 8133,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16389:2:25",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_27_by_1",
                                  "typeString": "int_const 27"
                                },
                                "value": "27"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_27_by_1",
                                  "typeString": "int_const 27"
                                }
                              ],
                              "id": 8132,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16381:7:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 8134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16381:11:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21263,
                          "src": "16381:15:25",
                          "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": 8143,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16381:58:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8131,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16360:7:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 8144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16360:89:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16330:119:25"
                },
                {
                  "assignments": [
                    8147
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8147,
                      "name": "denom",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16491:13:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8146,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16491:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8164,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31653231",
                            "id": 8153,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16554:4:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                              "typeString": "int_const 1000000000000000000000"
                            },
                            "value": "1e21"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                              "typeString": "int_const 1000000000000000000000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8150,
                                "name": "newReserveRatio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8124,
                                "src": "16533:15:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 8149,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16525:7:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 8151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16525:24:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21215,
                          "src": "16525:28:25",
                          "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": 8154,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16525:34:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3130",
                              "id": 8159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16598:2:25",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_10_by_1",
                                "typeString": "int_const 10"
                              },
                              "value": "10"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "**",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 8160,
                              "name": "reserveDecimalsDiff",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8130,
                              "src": "16602:19:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "16598:23:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8156,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8107,
                                "src": "16586:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "id": 8155,
                              "name": "currentPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7982,
                              "src": "16573:12:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                                "typeString": "function (contract ERC20) view returns (uint256)"
                              }
                            },
                            "id": 8157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16573:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21215,
                          "src": "16573:24:25",
                          "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": 8162,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16573:49:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8148,
                      "name": "rmul",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 199,
                      "src": "16507:4:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16507:125:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16491:141:25"
                },
                {
                  "assignments": [
                    8166
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8166,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16695:21:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8165,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "16695:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8174,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8169,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "16738:6:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8170,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "16738:18:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16738:20:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16730:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16730:29:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8167,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "16719:10:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16719:41:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16695:65:25"
                },
                {
                  "assignments": [
                    8176
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8176,
                      "name": "gdDecimalsDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16770:22:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8175,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16770:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8187,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8182,
                                "name": "gooddollar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8166,
                                "src": "16819:10:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                  "typeString": "contract GoodDollar"
                                }
                              },
                              "id": 8183,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3397,
                              "src": "16819:19:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 8184,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16819:21:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16811:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16811:30:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 8178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16803:2:25",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            }
                          ],
                          "id": 8177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16795:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16795:11:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8180,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "16795:15:25",
                      "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": 8186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16795:47:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16770:72:25"
                },
                {
                  "assignments": [
                    8189
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8189,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8212,
                      "src": "16852:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8188,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16852:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8205,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3130",
                          "id": 8201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17024:2:25",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8202,
                          "name": "gdDecimalsDiff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8176,
                          "src": "17028:14:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17024:18:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3130",
                                  "id": 8194,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16918:2:25",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8195,
                                  "name": "reserveDecimalsDiff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8130,
                                  "src": "16922:19:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16918:23:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8191,
                                  "name": "reserveToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8116,
                                  "src": "16887:12:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                                    "typeString": "struct GoodMarketMaker.ReserveToken memory"
                                  }
                                },
                                "id": 8192,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "reserveSupply",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7394,
                                "src": "16887:26:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8193,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21215,
                              "src": "16887:30:25",
                              "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": 8197,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16887:55:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8198,
                            "name": "denom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8147,
                            "src": "16991:5:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8190,
                          "name": "rdiv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "16869:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 8199,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16869:137:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8200,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "16869:154:25",
                      "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": 8204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16869:174:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16852:191:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8208,
                          "name": "reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8116,
                          "src": "17097:12:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveToken_$7399_memory_ptr",
                            "typeString": "struct GoodMarketMaker.ReserveToken memory"
                          }
                        },
                        "id": 8209,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gdSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7398,
                        "src": "17097:21:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8206,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8189,
                        "src": "17086:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8207,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "17086:10:25",
                      "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": 8210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17086:33:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8114,
                  "id": 8211,
                  "nodeType": "Return",
                  "src": "17079:40:25"
                }
              ]
            },
            "documentation": "@dev Calculate how much G$ to mint based on expansion change (new reserve\nratio), in order to keep G$ price the same at the bonding curve. the\nformula to calculate the gd to mint: gd to mint =\n(reservebalance / (newreserveratio * currentprice)) - gdsupply\n@param _token The reserve token\n@return How much to mint in order to keep price in bonding curve the same",
            "id": 8213,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8110,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8107,
                    "src": "16119:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8111,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8109,
                  "name": "onlyActiveToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7493,
                  "src": "16103:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16103:23:25"
              }
            ],
            "name": "calculateMintExpansion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8107,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8213,
                  "src": "16053:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8106,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "16053:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16052:14:25"
            },
            "returnParameters": {
              "id": 8114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8113,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8213,
                  "src": "16144:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8112,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16144:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16143:9:25"
            },
            "scope": 8274,
            "src": "16021:1105:25",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8272,
              "nodeType": "Block",
              "src": "17422:441:25",
              "statements": [
                {
                  "assignments": [
                    8223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8223,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8272,
                      "src": "17432:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17432:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8227,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8225,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8215,
                        "src": "17472:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8224,
                      "name": "calculateMintExpansion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8213,
                      "src": "17449:22:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view returns (uint256)"
                      }
                    },
                    "id": 8226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17449:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17432:47:25"
                },
                {
                  "assignments": [
                    8229
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8229,
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 8272,
                      "src": "17489:33:25",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8228,
                        "name": "ReserveToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7399,
                        "src": "17489:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8235,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8230,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7403,
                      "src": "17525:13:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ReserveToken_$7399_storage_$",
                        "typeString": "mapping(address => struct GoodMarketMaker.ReserveToken storage ref)"
                      }
                    },
                    "id": 8234,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8232,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8215,
                          "src": "17547:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$21849",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 8231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "17539:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 8233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17539:15:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17525:30:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveToken_$7399_storage",
                      "typeString": "struct GoodMarketMaker.ReserveToken storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17489:66:25"
                },
                {
                  "assignments": [
                    8237
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8237,
                      "name": "gdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 8272,
                      "src": "17565:16:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8236,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17565:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8240,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8238,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8229,
                      "src": "17584:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 8239,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "gdSupply",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7398,
                    "src": "17584:21:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17565:40:25"
                },
                {
                  "assignments": [
                    8242
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8242,
                      "name": "ratio",
                      "nodeType": "VariableDeclaration",
                      "scope": 8272,
                      "src": "17615:13:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8241,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17615:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8245,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8243,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8229,
                      "src": "17631:12:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                        "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                      }
                    },
                    "id": 8244,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "reserveRatio",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7396,
                    "src": "17631:25:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17615:41:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8246,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8229,
                        "src": "17666:12:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveToken_$7399_storage_ptr",
                          "typeString": "struct GoodMarketMaker.ReserveToken storage pointer"
                        }
                      },
                      "id": 8248,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "gdSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7398,
                      "src": "17666:21:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8251,
                          "name": "toMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8223,
                          "src": "17703:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8249,
                          "name": "gdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8237,
                          "src": "17690:8:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "17690:12:25",
                        "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": 8252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17690:20:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17666:44:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8254,
                  "nodeType": "ExpressionStatement",
                  "src": "17666:44:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8256,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8215,
                        "src": "17739:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8255,
                      "name": "expandReserveRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7644,
                      "src": "17720:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$21849_$returns$_t_uint32_$",
                        "typeString": "function (contract ERC20) returns (uint32)"
                      }
                    },
                    "id": 8257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17720:26:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 8258,
                  "nodeType": "ExpressionStatement",
                  "src": "17720:26:25"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8260,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "17780:3:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17780:10:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8263,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8215,
                            "src": "17800:6:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17792:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17792:15:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8265,
                        "name": "ratio",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "17809:5:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8266,
                        "name": "gdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8237,
                        "src": "17816:8:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8267,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "17826:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8259,
                      "name": "UBIExpansionMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7449,
                      "src": "17761:18:25",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17761:72:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8269,
                  "nodeType": "EmitStatement",
                  "src": "17756:77:25"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8270,
                    "name": "toMint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8223,
                    "src": "17850:6:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8221,
                  "id": 8271,
                  "nodeType": "Return",
                  "src": "17843:13:25"
                }
              ]
            },
            "documentation": "@dev Updates bonding curve based on expansion change and new minted amount\n@param _token The reserve token\n@return How much to mint in order to keep price in bonding curve the same",
            "id": 8273,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8217,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21351,
                  "src": "17394:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17394:9:25"
              }
            ],
            "name": "mintExpansion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8216,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8215,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8273,
                  "src": "17373:12:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8214,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "17373:5:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17372:14:25"
            },
            "returnParameters": {
              "id": 8221,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8220,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8273,
                  "src": "17413:7:25",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8219,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17413:7:25",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17412:9:25"
            },
            "scope": 8274,
            "src": "17350:513:25",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 8275,
        "src": "495:17370:25"
      }
    ],
    "src": "0:17866:25"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.268Z",
  "devdoc": {
    "methods": {
      "buy(address,uint256)": {
        "details": "Updates the _token bonding curve params. Emits `BalancesUpdated` with the new reserve token information.",
        "params": {
          "_token": "The reserve token buying with",
          "_tokenAmount": "The amount of reserve token buying with"
        },
        "return": "(gdReturn) Number of GD that will be given in exchange as calculated by the bonding curve"
      },
      "buyReturn(address,uint256)": {
        "details": "Calculates the buy return in GD according to the given _tokenAmount",
        "params": {
          "_token": "The reserve token buying with",
          "_tokenAmount": "The amount of reserve token buying with"
        },
        "return": "Number of GD that should be given in exchange as calculated by the bonding curve"
      },
      "calculateCrossConnectorReturn(uint256,uint32,uint256,uint32,uint256)": {
        "details": "deprecated, backward compatibility"
      },
      "calculateCrossReserveReturn(uint256,uint32,uint256,uint32,uint256)": {
        "details": "given two reserve balances/ratios and a sell amount (in the first reserve token), calculates the return for a conversion from the first reserve token to the second reserve token (in the second reserve token) note that prior to version 4, you should use 'calculateCrossConnectorReturn' instead     * Formula: Return = _toReserveBalance * (1 - (_fromReserveBalance / (_fromReserveBalance + _amount)) ^ (_fromReserveRatio / _toReserveRatio))",
        "params": {
          "_amount": "input reserve amount",
          "_fromReserveBalance": "input reserve balance",
          "_fromReserveRatio": "input reserve ratio, represented in ppm, 1-1000000",
          "_toReserveBalance": "output reserve balance",
          "_toReserveRatio": "output reserve ratio, represented in ppm, 1-1000000"
        },
        "return": "second reserve amount"
      },
      "calculateFundCost(uint256,uint256,uint32,uint256)": {
        "details": "given a smart token supply, reserve balance, total ratio and an amount of requested smart tokens, calculates the amount of reserve tokens required for purchasing the given amount of smart tokens     * Formula: Return = _reserveBalance * (((_supply + _amount) / _supply) ^ (MAX_RATIO / _totalRatio) - 1)",
        "params": {
          "_amount": "requested amount of smart tokens",
          "_reserveBalance": "reserve token balance",
          "_supply": "smart token supply",
          "_totalRatio": "total ratio, represented in ppm, 2-2000000"
        },
        "return": "amount of reserve tokens"
      },
      "calculateLiquidateReturn(uint256,uint256,uint32,uint256)": {
        "details": "given a smart token supply, reserve balance, total ratio and an amount of smart tokens to liquidate, calculates the amount of reserve tokens received for selling the given amount of smart tokens     * Formula: Return = _reserveBalance * (1 - ((_supply - _amount) / _supply) ^ (MAX_RATIO / _totalRatio))",
        "params": {
          "_amount": "amount of smart tokens to liquidate",
          "_reserveBalance": "reserve token balance",
          "_supply": "smart token supply",
          "_totalRatio": "total ratio, represented in ppm, 2-2000000"
        },
        "return": "amount of reserve tokens"
      },
      "calculateMintExpansion(address)": {
        "details": "Calculate how much G$ to mint based on expansion change (new reserve ratio), in order to keep G$ price the same at the bonding curve. the formula to calculate the gd to mint: gd to mint = (reservebalance / (newreserveratio * currentprice)) - gdsupply",
        "params": {
          "_token": "The reserve token"
        },
        "return": "How much to mint in order to keep price in bonding curve the same"
      },
      "calculateMintInterest(address,uint256)": {
        "details": "Calculates how much G$ to mint based on added token supply (from interest) and on current reserve ratio, in order to keep G$ price the same at the bonding curve formula to calculate the gd to mint: gd to mint = addreservebalance * (gdsupply / (reservebalance * reserveratio))",
        "params": {
          "_addTokenSupply": "amount of token added to supply",
          "_token": "the reserve token"
        },
        "return": "how much to mint in order to keep price in bonding curve the same"
      },
      "calculateNewReserveRatio(address)": {
        "details": "Calculates how much to decrease the reserve ratio for _token by the `reserveRatioDailyExpansion`",
        "params": {
          "_token": "The reserve token to calculate the reserve ratio for"
        },
        "return": "The new reserve ratio"
      },
      "calculatePurchaseReturn(uint256,uint256,uint32,uint256)": {
        "details": "given a token supply, reserve balance, ratio and a deposit amount (in the reserve token), calculates the return for a given conversion (in the main token)     * Formula: Return = _supply * ((1 + _depositAmount / _reserveBalance) ^ (_reserveRatio / 1000000) - 1)",
        "params": {
          "_depositAmount": "deposit amount, in reserve token",
          "_reserveBalance": "total reserve balance",
          "_reserveRatio": "reserve ratio, represented in ppm, 1-1000000",
          "_supply": "token total supply"
        },
        "return": "purchase return amount"
      },
      "calculateSaleReturn(uint256,uint256,uint32,uint256)": {
        "details": "given a token supply, reserve balance, ratio and a sell amount (in the main token), calculates the return for a given conversion (in the reserve token)     * Formula: Return = _reserveBalance * (1 - (1 - _sellAmount / _supply) ^ (1000000 / _reserveRatio))",
        "params": {
          "_reserveBalance": "total reserve",
          "_reserveRatio": "constant reserve Ratio, represented in ppm, 1-1000000",
          "_sellAmount": "sell amount, in the token itself",
          "_supply": "token total supply"
        },
        "return": "sale return amount"
      },
      "constructor": {
        "details": "Constructor",
        "params": {
          "_avatar": "The avatar of the DAO",
          "_denom": "The denominator to calculate the global `reserveRatioDailyExpansion` from",
          "_nom": "The numerator to calculate the global `reserveRatioDailyExpansion` from"
        }
      },
      "currentPrice(address)": {
        "details": "Current price of GD in `token`. currently only cDAI is supported.",
        "params": {
          "_token": "The desired reserve token to have"
        },
        "return": "price of GD"
      },
      "expandReserveRatio(address)": {
        "details": "Decreases the reserve ratio for _token by the `reserveRatioDailyExpansion`",
        "params": {
          "_token": "The token to change the reserve ratio for"
        },
        "return": "The new reserve ratio"
      },
      "initializeToken(address,uint256,uint256,uint32)": {
        "details": "Initialize a reserve token entity with the given parameters",
        "params": {
          "_gdSupply": "Initial supply of GD to set the price",
          "_reserveRatio": "The starting reserve ratio",
          "_token": "The reserve token",
          "_tokenSupply": "Initial supply of reserve token to set the price"
        }
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "isRegistered()": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "isRegistered(address)": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "mintExpansion(address)": {
        "details": "Updates bonding curve based on expansion change and new minted amount",
        "params": {
          "_token": "The reserve token"
        },
        "return": "How much to mint in order to keep price in bonding curve the same"
      },
      "mintInterest(address,uint256)": {
        "details": "Updates bonding curve based on _addTokenSupply and new minted amount",
        "params": {
          "_addTokenSupply": "Amount of token added to supply",
          "_token": "The reserve token"
        },
        "return": "How much to mint in order to keep price in bonding curve the same"
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract."
      },
      "sell(address,uint256)": {
        "details": "Updates the _token bonding curve params. Emits `BalancesUpdated` with the new reserve token information.",
        "params": {
          "_gdAmount": "The amount of GD that are sold",
          "_token": "The desired reserve token to have"
        },
        "return": "Number of tokens that will be given in exchange as calculated by the bonding curve"
      },
      "sellReturn(address,uint256)": {
        "details": "Calculates the sell return in _token according to the given _gdAmount",
        "params": {
          "_gdAmount": "The amount of GD that are sold",
          "_token": "The desired reserve token to have"
        },
        "return": "Number of tokens that should be given in exchange as calculated by the bonding curve"
      },
      "sellWithContribution(address,uint256,uint256)": {
        "details": "Calculates the sell return with contribution in _token and update the bonding curve params. Emits `BalancesUpdated` with the new reserve token information.",
        "params": {
          "_contributionGdAmount": "The number of GD tokens that will not be traded for the reserve token",
          "_gdAmount": "The amount of GD that are sold",
          "_token": "The desired reserve token to have"
        },
        "return": "Number of tokens that will be given in exchange as calculated by the bonding curve"
      },
      "setAvatar(address)": {
        "details": "Function to set a new avatar and controller for scheme can only be done by owner of scheme"
      },
      "setReserveRatioDailyExpansion(uint256,uint256)": {
        "details": "Allows the DAO to change the daily expansion rate it is calculated by _nom/_denom with e27 precision. Emits `ReserveRatioUpdated` event after the ratio has changed. Only Avatar can call this method.",
        "params": {
          "_denom": "The denominator to calculate the global `reserveRatioDailyExpansion` from",
          "_nom": "The numerator to calculate the global `reserveRatioDailyExpansion` from"
        }
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      }
    },
    "title": "Dynamic reserve ratio market maker"
  },
  "userdoc": {
    "methods": {
      "renounceOwnership()": {
        "notice": "Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
      }
    }
  }
}