{
  "contractName": "KToken",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "invokeTo",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "invokeValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "invokeDataHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "underlyingAmount",
          "type": "uint256"
        }
      ],
      "name": "Invocation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "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": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "poolReward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "platformReward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "Reward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOfUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isUnderlyingEther",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "nativeAmount",
          "type": "uint256"
        }
      ],
      "name": "nativeAmountToUnderlyingAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "kTokenAmount",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "redeemUnderlying",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalReserve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "underlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "underlyingAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "ceil",
          "type": "bool"
        }
      ],
      "name": "underlyingAmountToNativeAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "invokeTo",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "invokeData",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "underlyingAmount",
          "type": "uint256"
        }
      ],
      "name": "invoke",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        }
      ],
      "name": "calculateRepaymentAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "platformReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "platformVaultAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isKToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentSender",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentTokenAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentRepaymentAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolRewardBips",
          "type": "uint256"
        }
      ],
      "name": "setPoolReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "platformRewardBips",
          "type": "uint256"
        }
      ],
      "name": "setPlatformReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newPlatformVaultAddress",
          "type": "address"
        }
      ],
      "name": "setPlatformVaultAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"invokeTo\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invokeValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"invokeDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"}],\"name\":\"Invocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"platformReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"Reward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"calculateRepaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRepaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invokeTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"invokeData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"}],\"name\":\"invoke\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isKToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnderlyingEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nativeAmount\",\"type\":\"uint256\"}],\"name\":\"nativeAmountToUnderlyingAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformVaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"platformRewardBips\",\"type\":\"uint256\"}],\"name\":\"setPlatformReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPlatformVaultAddress\",\"type\":\"address\"}],\"name\":\"setPlatformVaultAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolRewardBips\",\"type\":\"uint256\"}],\"name\":\"setPoolReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"ceil\",\"type\":\"bool\"}],\"name\":\"underlyingAmountToNativeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol\":\"KToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvocationHook.sol\":{\"keccak256\":\"0x36fb31db8a8e7eed7038b37554582655826969a556005d8ee3ab5070fe034860\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e0dde70be03ea1e086a5bce0d3a7bb1ac65549eab7ea2618343255332edddca7\",\"dweb:/ipfs/QmVaQG686g3tbgM3L3mtw4ei1WxzcDRcS9UxipSt4KCYs1\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvokable.sol\":{\"keccak256\":\"0x372bca80a3e9d20439e9bf88cc026d6d1ec01556463e902511c67b6fc92e12d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a5e6b5ef4246d03871bbd44b34e1212a9567d963f1b1e8e58e6273709442d4fb\",\"dweb:/ipfs/Qmb5Es45FLS4hhNGb9md3KU7L7hyMW7HHzumrVfsZZgxgC\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/ExtendedMath.sol\":{\"keccak256\":\"0x5ced249631b5dfe431f449d725d9f318b01ab0785306ca5e73cdf43760ab271a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3f3aef65abfcc02e451ad27a849caba0e6375abb26e28e7605928d19d561c3dd\",\"dweb:/ipfs/QmY5zMeH5x3QMS5xkxkY3DH4SDPWLGJyfPk1R8wPJXH9vr\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol\":{\"keccak256\":\"0xc8c0d9869f316491406bc2d135d00682926f2a4b62fe1e3a6daf5b37515bbe8b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://856af08828c3a5516a4018bdd2ed93eea5c02e60305bbc7e31fd8bd46446a97b\",\"dweb:/ipfs/QmVFroDk751zBN2fM6TiwCyhUinzGt2sRPwT3DUhnVgczU\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol\":{\"keccak256\":\"0xfaaaa4324c6cc78d9d1268426eb04fe41d8584ade05bbf22eac4875ecdf174d7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1e4149a0ecd14003c261b2243adfc19d7a009c83c32341ebdd6a8929c0bdd14d\",\"dweb:/ipfs/QmQbySda22WBU4oycYfrTye1RsJuz1Ub74ksoST7PeegHW\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/UnlimitedApprovalErc20.sol\":{\"keccak256\":\"0x407178fcd78f0a19d705e64aaaa26ae997d228f077f3cf6833f9f3eb31c72308\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://097906cbe6f8f35ba1763bd122d551ec302f45cf677021bbcdb8a55c706940d9\",\"dweb:/ipfs/QmVh7kcUWsXt3QApppB1njhGHfzdP813KSTUF6bh3VCmMM\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248246ac66e6479dce1ad7d4945ec5540c98ceb09881e93c93f7c48d5772925c\",\"dweb:/ipfs/QmXr8tmUiZgEYid6ixeeBRmTdUnASWjKzhP3KRxMPy8fRt\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x46d2453e9db55eae25c9abdae2c42229086c54f1a6a247e8ce32658bb785f6ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://198ef77ef5d9f7a7709d6bbfba1d4d54d82ccc15358e9dced37f1376dac887fa\",\"dweb:/ipfs/QmQHFvCA74s3AHU3NMn4AAYzFTt6UotWq7yk3WzLQs1oJS\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e50e3f7b6482fb6f598f2e006994a74aa492687daa4b3eee7fd4fb5398ce7f\",\"dweb:/ipfs/QmZudqoPSkA4USLMFsBBmt19dDPZFS8aaAmL5R7pECXu6t\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x482b6d82ba1c9c73758ae15068a438361d4187b7a4e342db17ef0f828cb5e21a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89725e56bc9c6cfb69521ceaa4a489561b928e930b71e30db85b24024c1c2c03\",\"dweb:/ipfs/QmNvpotZA1Fe48msV6TShSTVxeQ2dkaDS9MTKP4bNxyUG3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x2a245b797741f05f91212b1c2155a1b99a8884e6fd4c27953c4d3073732737f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76325ec3159cd859da98cab114513ec81095fa38e1412ffffb9b789bf14d6b38\",\"dweb:/ipfs/QmNdE2779u3DdRczjpx6RoevVa9kVJsCyEfnXWjkUw79jo\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x1153f6dd334c01566417b8c551122450542a2b75a2bbb379d59a8c320ed6da28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://002b4e5c26a2a069ba42486b83bf9c4b5461f3d5def32f9ef52b0aef8905d6d2\",\"dweb:/ipfs/QmPG44XDF4npiqRzzGvqJroDtUKfcR78wcreQ9bXa6guW6\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "/*\n\n    Copyright 2020 Kollateral LLC.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\n// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\nimport \"../token/CollateralizedToken.sol\";\nimport \"../common/invoke/IInvocationHook.sol\";\nimport \"../common/invoke/IInvokable.sol\";\n\nabstract contract KToken is\n    IInvocationHook,\n    CollateralizedToken,\n    Ownable,\n    Pausable\n{\n    using SafeMath for uint256;\n\n    event Invocation(\n        address invokeTo,\n        uint256 invokeValue,\n        bytes32 invokeDataHash,\n        uint256 underlyingAmount\n    );\n    event Reward(\n        uint256 poolReward,\n        uint256 platformReward,\n        address tokenAddress\n    );\n\n    /* Reward (in bips) distributed to pool per transaction */\n    uint256 internal _poolRewardBips;\n\n    /* Reward (in bips) distributed to platform per transaction */\n    uint256 internal _platformRewardBips;\n\n    /* Address that collects the platform reward disbursements */\n    address internal _platformVaultAddress;\n\n    /* Helper - store called token amount for retrieval */\n    address internal _currentSender;\n\n    /* Helper - store called token amount for retrieval */\n    uint256 internal _currentTokenAmount;\n\n    /* Helper - store expected balance for currently executing transaction */\n    uint256 internal _currentExpectedBalance;\n\n    constructor() {}\n\n    function invoke(\n        address invokeTo,\n        bytes calldata invokeData,\n        uint256 underlyingAmount\n    ) external payable nonReentrant whenNotPaused {\n        require(\n            invokeTo != address(this),\n            \"KToken: cannot invoke this contract\"\n        );\n\n        /* Record starting and expected ending balance */\n        uint256 startingBalance = totalReserve().sub(\n            payableReserveAdjustment()\n        );\n        setInvocationState(\n            msg.sender,\n            underlyingAmount,\n            calculateExpectedBalance(startingBalance, underlyingAmount)\n        );\n\n        /* Transfer invocation amount of underlying token to caller's invocation address */\n        require(\n            transferUnderlying(invokeTo, underlyingAmount),\n            \"KToken: unable to transfer invocation amount\"\n        );\n\n        /* Invoke caller's function */\n        IInvokable(invokeTo).execute{value: msg.value}(invokeData);\n        emit Invocation(\n            invokeTo,\n            msg.value,\n            keccak256(invokeData),\n            underlyingAmount\n        );\n\n        /* Verify tokens were returned with correct reward */\n        require(\n            totalReserve() == _currentExpectedBalance,\n            \"KToken: incorrect ending balance\"\n        );\n\n        /* Extract platform reward */\n        uint256 platformReward = calculatePlatformReward(underlyingAmount);\n\n        require(\n            transferUnderlying(_platformVaultAddress, platformReward),\n            \"KToken: unable to transfer platform reward\"\n        );\n        emit Reward(\n            calculatePoolReward(underlyingAmount),\n            platformReward,\n            underlying()\n        );\n\n        /* Reset data for gas refund */\n        setInvocationState(address(0), 0, 0);\n    }\n\n    function payableReserveAdjustment()\n        internal\n        view\n        virtual\n        returns (uint256)\n    {\n        return 0;\n    }\n\n    function setInvocationState(\n        address currentSender,\n        uint256 currentTokenAmount,\n        uint256 currentExpectedBalance\n    ) internal {\n        _currentSender = currentSender;\n        _currentTokenAmount = currentTokenAmount;\n        _currentExpectedBalance = currentExpectedBalance;\n    }\n\n    function calculatePoolReward(uint256 tokenAmount)\n        internal\n        view\n        returns (uint256)\n    {\n        return tokenAmount.mul(_poolRewardBips).div(10000);\n    }\n\n    function calculatePlatformReward(uint256 tokenAmount)\n        internal\n        view\n        returns (uint256)\n    {\n        return tokenAmount.mul(_platformRewardBips).div(10000);\n    }\n\n    function calculateExpectedBalance(\n        uint256 startingBalance,\n        uint256 tokenAmount\n    ) internal view returns (uint256) {\n        return\n            startingBalance.add(calculatePoolReward(tokenAmount)).add(\n                calculatePlatformReward(tokenAmount)\n            );\n    }\n\n    function calculateRepaymentAmount(uint256 tokenAmount)\n        external\n        view\n        returns (uint256)\n    {\n        return\n            tokenAmount.add(calculatePoolReward(tokenAmount)).add(\n                calculatePlatformReward(tokenAmount)\n            );\n    }\n\n    function poolReward() external view returns (uint256) {\n        return _poolRewardBips;\n    }\n\n    function platformReward() external view returns (uint256) {\n        return _platformRewardBips;\n    }\n\n    function platformVaultAddress() external view returns (address) {\n        return _platformVaultAddress;\n    }\n\n    function isKToken() external pure returns (bool) {\n        return true;\n    }\n\n    /* Helper hook for invoked transaction */\n    function currentSender() external view override returns (address) {\n        return _currentSender;\n    }\n\n    function currentTokenAddress() external view override returns (address) {\n        return _underlying;\n    }\n\n    function currentTokenAmount() external view override returns (uint256) {\n        return _currentTokenAmount;\n    }\n\n    function currentRepaymentAmount() external view override returns (uint256) {\n        return _currentExpectedBalance.sub(totalReserve());\n    }\n\n    /* ADMIN FUNCTIONS */\n\n    function setPoolReward(uint256 poolRewardBips) external onlyOwner {\n        _poolRewardBips = poolRewardBips;\n    }\n\n    function setPlatformReward(uint256 platformRewardBips) external onlyOwner {\n        _platformRewardBips = platformRewardBips;\n    }\n\n    function setPlatformVaultAddress(address newPlatformVaultAddress)\n        external\n        onlyOwner\n    {\n        _platformVaultAddress = newPlatformVaultAddress;\n    }\n\n    function pause() external onlyOwner whenNotPaused {\n        _pause();\n    }\n\n    function unpause() external onlyOwner whenPaused {\n        _unpause();\n    }\n}\n",
  "sourcePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
  "ast": {
    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
    "exportedSymbols": {
      "CollateralizedToken": [
        5197
      ],
      "Context": [
        5279
      ],
      "ERC20": [
        6087
      ],
      "ExtendedMath": [
        1506
      ],
      "IERC20": [
        6165
      ],
      "IInvocationHook": [
        1170
      ],
      "IInvokable": [
        1178
      ],
      "KToken": [
        2115
      ],
      "Ownable": [
        5388
      ],
      "Pausable": [
        6255
      ],
      "ReentrancyGuard": [
        6295
      ],
      "SafeMath": [
        5584
      ],
      "UnlimitedApprovalErc20": [
        5256
      ]
    },
    "id": 2116,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1718,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "640:23:14"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 1719,
        "nodeType": "ImportDirective",
        "scope": 2116,
        "sourceUnit": 5585,
        "src": "665:51:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 1720,
        "nodeType": "ImportDirective",
        "scope": 2116,
        "sourceUnit": 5389,
        "src": "717:52:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
        "file": "@openzeppelin/contracts/utils/Pausable.sol",
        "id": 1721,
        "nodeType": "ImportDirective",
        "scope": 2116,
        "sourceUnit": 6256,
        "src": "770:52:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol",
        "file": "../token/CollateralizedToken.sol",
        "id": 1722,
        "nodeType": "ImportDirective",
        "scope": 2116,
        "sourceUnit": 5198,
        "src": "823:42:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvocationHook.sol",
        "file": "../common/invoke/IInvocationHook.sol",
        "id": 1723,
        "nodeType": "ImportDirective",
        "scope": 2116,
        "sourceUnit": 1171,
        "src": "866:46:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvokable.sol",
        "file": "../common/invoke/IInvokable.sol",
        "id": 1724,
        "nodeType": "ImportDirective",
        "scope": 2116,
        "sourceUnit": 1179,
        "src": "913:41:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 1725,
              "name": "IInvocationHook",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1170,
              "src": "988:15:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IInvocationHook_$1170",
                "typeString": "contract IInvocationHook"
              }
            },
            "id": 1726,
            "nodeType": "InheritanceSpecifier",
            "src": "988:15:14"
          },
          {
            "baseName": {
              "id": 1727,
              "name": "CollateralizedToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5197,
              "src": "1009:19:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CollateralizedToken_$5197",
                "typeString": "contract CollateralizedToken"
              }
            },
            "id": 1728,
            "nodeType": "InheritanceSpecifier",
            "src": "1009:19:14"
          },
          {
            "baseName": {
              "id": 1729,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5388,
              "src": "1034:7:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$5388",
                "typeString": "contract Ownable"
              }
            },
            "id": 1730,
            "nodeType": "InheritanceSpecifier",
            "src": "1034:7:14"
          },
          {
            "baseName": {
              "id": 1731,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6255,
              "src": "1047:8:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$6255",
                "typeString": "contract Pausable"
              }
            },
            "id": 1732,
            "nodeType": "InheritanceSpecifier",
            "src": "1047:8:14"
          }
        ],
        "contractDependencies": [
          1170,
          1506,
          5197,
          5256,
          5279,
          5388,
          6087,
          6165,
          6255,
          6295
        ],
        "contractKind": "contract",
        "fullyImplemented": false,
        "id": 2115,
        "linearizedBaseContracts": [
          2115,
          6255,
          5388,
          5197,
          1506,
          6295,
          5256,
          6087,
          6165,
          5279,
          1170
        ],
        "name": "KToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1735,
            "libraryName": {
              "id": 1733,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5584,
              "src": "1068:8:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$5584",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1062:27:14",
            "typeName": {
              "id": 1734,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1081:7:14",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "anonymous": false,
            "id": 1745,
            "name": "Invocation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1744,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1737,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "invokeTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 1745,
                  "src": "1121:16:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1736,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1121:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1739,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "invokeValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 1745,
                  "src": "1147:19:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1738,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1147:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1741,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "invokeDataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 1745,
                  "src": "1176:22:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1740,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1176:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1743,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "underlyingAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1745,
                  "src": "1208:24:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1742,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1208:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1111:127:14"
            },
            "src": "1095:144:14"
          },
          {
            "anonymous": false,
            "id": 1753,
            "name": "Reward",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1747,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "poolReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 1753,
                  "src": "1266:18:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1746,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1266:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1749,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "platformReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 1753,
                  "src": "1294:22:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1748,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1294:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1751,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1753,
                  "src": "1326:20:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1750,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1326:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1256:96:14"
            },
            "src": "1244:109:14"
          },
          {
            "constant": false,
            "id": 1755,
            "mutability": "mutable",
            "name": "_poolRewardBips",
            "nodeType": "VariableDeclaration",
            "scope": 2115,
            "src": "1422:32:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1754,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1422:7:14",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1757,
            "mutability": "mutable",
            "name": "_platformRewardBips",
            "nodeType": "VariableDeclaration",
            "scope": 2115,
            "src": "1528:36:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1756,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1528:7:14",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1759,
            "mutability": "mutable",
            "name": "_platformVaultAddress",
            "nodeType": "VariableDeclaration",
            "scope": 2115,
            "src": "1637:38:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1758,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1637:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1761,
            "mutability": "mutable",
            "name": "_currentSender",
            "nodeType": "VariableDeclaration",
            "scope": 2115,
            "src": "1741:31:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1760,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1741:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1763,
            "mutability": "mutable",
            "name": "_currentTokenAmount",
            "nodeType": "VariableDeclaration",
            "scope": 2115,
            "src": "1838:36:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1762,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1838:7:14",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1765,
            "mutability": "mutable",
            "name": "_currentExpectedBalance",
            "nodeType": "VariableDeclaration",
            "scope": 2115,
            "src": "1959:40:14",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1764,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1959:7:14",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1768,
              "nodeType": "Block",
              "src": "2020:2:14",
              "statements": []
            },
            "id": 1769,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1766,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2017:2:14"
            },
            "returnParameters": {
              "id": 1767,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2020:0:14"
            },
            "scope": 2115,
            "src": "2006:16:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1879,
              "nodeType": "Block",
              "src": "2189:1633:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1788,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1783,
                          "name": "invokeTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1771,
                          "src": "2220:8:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 1786,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "2240:4:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_KToken_$2115",
                                "typeString": "contract KToken"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_KToken_$2115",
                                "typeString": "contract KToken"
                              }
                            ],
                            "id": 1785,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2232:7:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1784,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2232:7:14",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2232:13:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2220:25:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4b546f6b656e3a2063616e6e6f7420696e766f6b65207468697320636f6e7472616374",
                        "id": 1789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2259:37:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3d841e9495eb9aca67b9c767c4a03783461f65ceccd89be732f7fa54f6a79acd",
                          "typeString": "literal_string \"KToken: cannot invoke this contract\""
                        },
                        "value": "KToken: cannot invoke this contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3d841e9495eb9aca67b9c767c4a03783461f65ceccd89be732f7fa54f6a79acd",
                          "typeString": "literal_string \"KToken: cannot invoke this contract\""
                        }
                      ],
                      "id": 1782,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2199:7:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2199:107:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1791,
                  "nodeType": "ExpressionStatement",
                  "src": "2199:107:14"
                },
                {
                  "assignments": [
                    1793
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1793,
                      "mutability": "mutable",
                      "name": "startingBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1879,
                      "src": "2375:23:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1792,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2375:7:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1800,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1797,
                          "name": "payableReserveAdjustment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1888,
                          "src": "2433:24:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1798,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2433:26:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1794,
                          "name": "totalReserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5174,
                          "src": "2401:12:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2401:14:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5434,
                      "src": "2401:18:14",
                      "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": 1799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2401:68:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2375:94:14"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1802,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2511:3:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1803,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2511:10:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 1804,
                        "name": "underlyingAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1775,
                        "src": "2535:16:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 1806,
                            "name": "startingBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1793,
                            "src": "2590:15:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 1807,
                            "name": "underlyingAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1775,
                            "src": "2607:16:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1805,
                          "name": "calculateExpectedBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1964,
                          "src": "2565:24:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256)"
                          }
                        },
                        "id": 1808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2565:59:14",
                        "tryCall": false,
                        "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": 1801,
                      "name": "setInvocationState",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1910,
                      "src": "2479:18:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 1809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2479:155:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1810,
                  "nodeType": "ExpressionStatement",
                  "src": "2479:155:14"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1813,
                            "name": "invokeTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1771,
                            "src": "2777:8:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1814,
                            "name": "underlyingAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1775,
                            "src": "2787:16:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1812,
                          "name": "transferUnderlying",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5080,
                          "src": "2758:18:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) returns (bool)"
                          }
                        },
                        "id": 1815,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2758:46:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4b546f6b656e3a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e74",
                        "id": 1816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2818:46:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9a876903edbe61c9c9bb19657e7f4f284ed0b2ad443be8d0a136778f9de7160d",
                          "typeString": "literal_string \"KToken: unable to transfer invocation amount\""
                        },
                        "value": "KToken: unable to transfer invocation amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9a876903edbe61c9c9bb19657e7f4f284ed0b2ad443be8d0a136778f9de7160d",
                          "typeString": "literal_string \"KToken: unable to transfer invocation amount\""
                        }
                      ],
                      "id": 1811,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2737:7:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2737:137:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1818,
                  "nodeType": "ExpressionStatement",
                  "src": "2737:137:14"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1826,
                        "name": "invokeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1773,
                        "src": "2971:10:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 1820,
                              "name": "invokeTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1771,
                              "src": "2935:8:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1819,
                            "name": "IInvokable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1178,
                            "src": "2924:10:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IInvokable_$1178_$",
                              "typeString": "type(contract IInvokable)"
                            }
                          },
                          "id": 1821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2924:20:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IInvokable_$1178",
                            "typeString": "contract IInvokable"
                          }
                        },
                        "id": 1822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "execute",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1177,
                        "src": "2924:28:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$returns$__$",
                          "typeString": "function (bytes memory) payable external"
                        }
                      },
                      "id": 1825,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "expression": {
                            "id": 1823,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2960:3:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "2960:9:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "2924:46:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$returns$__$value",
                        "typeString": "function (bytes memory) payable external"
                      }
                    },
                    "id": 1827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2924:58:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1828,
                  "nodeType": "ExpressionStatement",
                  "src": "2924:58:14"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1830,
                        "name": "invokeTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1771,
                        "src": "3021:8:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 1831,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3043:3:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "src": "3043:9:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 1834,
                            "name": "invokeData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1773,
                            "src": "3076:10:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "id": 1833,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "3066:9:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 1835,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3066:21:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 1836,
                        "name": "underlyingAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1775,
                        "src": "3101:16:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1829,
                      "name": "Invocation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1745,
                      "src": "2997:10:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,bytes32,uint256)"
                      }
                    },
                    "id": 1837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2997:130:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1838,
                  "nodeType": "EmitStatement",
                  "src": "2992:135:14"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1840,
                            "name": "totalReserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5174,
                            "src": "3221:12:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3221:14:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1842,
                          "name": "_currentExpectedBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1765,
                          "src": "3239:23:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3221:41:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4b546f6b656e3a20696e636f727265637420656e64696e672062616c616e6365",
                        "id": 1844,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3276:34:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0992a0a38e0987f3f154612fd783c1937b8b2184454595eb3eee36f99858ff3b",
                          "typeString": "literal_string \"KToken: incorrect ending balance\""
                        },
                        "value": "KToken: incorrect ending balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0992a0a38e0987f3f154612fd783c1937b8b2184454595eb3eee36f99858ff3b",
                          "typeString": "literal_string \"KToken: incorrect ending balance\""
                        }
                      ],
                      "id": 1839,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3200:7:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3200:120:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1846,
                  "nodeType": "ExpressionStatement",
                  "src": "3200:120:14"
                },
                {
                  "assignments": [
                    1848
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1848,
                      "mutability": "mutable",
                      "name": "platformReward",
                      "nodeType": "VariableDeclaration",
                      "scope": 1879,
                      "src": "3369:22:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1847,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3369:7:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1852,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1850,
                        "name": "underlyingAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1775,
                        "src": "3418:16:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1849,
                      "name": "calculatePlatformReward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1942,
                      "src": "3394:23:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 1851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3394:41:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3369:66:14"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1855,
                            "name": "_platformVaultAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1759,
                            "src": "3486:21:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1856,
                            "name": "platformReward",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1848,
                            "src": "3509:14:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1854,
                          "name": "transferUnderlying",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5080,
                          "src": "3467:18:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) returns (bool)"
                          }
                        },
                        "id": 1857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3467:57:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4b546f6b656e3a20756e61626c6520746f207472616e7366657220706c6174666f726d20726577617264",
                        "id": 1858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3538:44:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bf7cd392b81f131d7dd401c8cb1824a8d9e742896f54853b90886c17ebc8d33c",
                          "typeString": "literal_string \"KToken: unable to transfer platform reward\""
                        },
                        "value": "KToken: unable to transfer platform reward"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bf7cd392b81f131d7dd401c8cb1824a8d9e742896f54853b90886c17ebc8d33c",
                          "typeString": "literal_string \"KToken: unable to transfer platform reward\""
                        }
                      ],
                      "id": 1853,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3446:7:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3446:146:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1860,
                  "nodeType": "ExpressionStatement",
                  "src": "3446:146:14"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1863,
                            "name": "underlyingAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1775,
                            "src": "3647:16:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1862,
                          "name": "calculatePoolReward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1926,
                          "src": "3627:19:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 1864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3627:37:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1865,
                        "name": "platformReward",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1848,
                        "src": "3678:14:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1866,
                          "name": "underlying",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5196,
                          "src": "3706:10:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 1867,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3706:12:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1861,
                      "name": "Reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1753,
                      "src": "3607:6:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,uint256,address)"
                      }
                    },
                    "id": 1868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3607:121:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1869,
                  "nodeType": "EmitStatement",
                  "src": "3602:126:14"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1873,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3806:1:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3798:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1871,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3798:7:14",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3798:10:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 1875,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3810:1:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "hexValue": "30",
                        "id": 1876,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3813:1:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 1870,
                      "name": "setInvocationState",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1910,
                      "src": "3779:18:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 1877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3779:36:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1878,
                  "nodeType": "ExpressionStatement",
                  "src": "3779:36:14"
                }
              ]
            },
            "functionSelector": "9e976db1",
            "id": 1880,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1778,
                "modifierName": {
                  "id": 1777,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6294,
                  "src": "2162:12:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2162:12:14"
              },
              {
                "id": 1780,
                "modifierName": {
                  "id": 1779,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6212,
                  "src": "2175:13:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2175:13:14"
              }
            ],
            "name": "invoke",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1771,
                  "mutability": "mutable",
                  "name": "invokeTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 1880,
                  "src": "2053:16:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1770,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2053:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1773,
                  "mutability": "mutable",
                  "name": "invokeData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1880,
                  "src": "2079:25:14",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1772,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2079:5:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1775,
                  "mutability": "mutable",
                  "name": "underlyingAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1880,
                  "src": "2114:24:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1774,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2114:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2043:101:14"
            },
            "returnParameters": {
              "id": 1781,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2189:0:14"
            },
            "scope": 2115,
            "src": "2028:1794:14",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1887,
              "nodeType": "Block",
              "src": "3940:25:14",
              "statements": [
                {
                  "expression": {
                    "hexValue": "30",
                    "id": 1885,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3957:1:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 1884,
                  "id": 1886,
                  "nodeType": "Return",
                  "src": "3950:8:14"
                }
              ]
            },
            "id": 1888,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "payableReserveAdjustment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1881,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3861:2:14"
            },
            "returnParameters": {
              "id": 1884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1883,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1888,
                  "src": "3927:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1882,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3927:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3926:9:14"
            },
            "scope": 2115,
            "src": "3828:137:14",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1909,
              "nodeType": "Block",
              "src": "4121:155:14",
              "statements": [
                {
                  "expression": {
                    "id": 1899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1897,
                      "name": "_currentSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1761,
                      "src": "4131:14:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1898,
                      "name": "currentSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1890,
                      "src": "4148:13:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4131:30:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1900,
                  "nodeType": "ExpressionStatement",
                  "src": "4131:30:14"
                },
                {
                  "expression": {
                    "id": 1903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1901,
                      "name": "_currentTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1763,
                      "src": "4171:19:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1902,
                      "name": "currentTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1892,
                      "src": "4193:18:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4171:40:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1904,
                  "nodeType": "ExpressionStatement",
                  "src": "4171:40:14"
                },
                {
                  "expression": {
                    "id": 1907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1905,
                      "name": "_currentExpectedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1765,
                      "src": "4221:23:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1906,
                      "name": "currentExpectedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1894,
                      "src": "4247:22:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4221:48:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1908,
                  "nodeType": "ExpressionStatement",
                  "src": "4221:48:14"
                }
              ]
            },
            "id": 1910,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setInvocationState",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1890,
                  "mutability": "mutable",
                  "name": "currentSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1910,
                  "src": "4008:21:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1889,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4008:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1892,
                  "mutability": "mutable",
                  "name": "currentTokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1910,
                  "src": "4039:26:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1891,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4039:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1894,
                  "mutability": "mutable",
                  "name": "currentExpectedBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 1910,
                  "src": "4075:30:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1893,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4075:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3998:113:14"
            },
            "returnParameters": {
              "id": 1896,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4121:0:14"
            },
            "scope": 2115,
            "src": "3971:305:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1925,
              "nodeType": "Block",
              "src": "4392:67:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3130303030",
                        "id": 1922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4446:5:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 1919,
                            "name": "_poolRewardBips",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "4425:15:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 1917,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1912,
                            "src": "4409:11:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5497,
                          "src": "4409:15:14",
                          "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": 1920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4409:32:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5514,
                      "src": "4409:36:14",
                      "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": 1923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4409:43:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1916,
                  "id": 1924,
                  "nodeType": "Return",
                  "src": "4402:50:14"
                }
              ]
            },
            "id": 1926,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculatePoolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1912,
                  "mutability": "mutable",
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1926,
                  "src": "4311:19:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1911,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4311:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4310:21:14"
            },
            "returnParameters": {
              "id": 1916,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1915,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1926,
                  "src": "4379:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1914,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4379:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4378:9:14"
            },
            "scope": 2115,
            "src": "4282:177:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1941,
              "nodeType": "Block",
              "src": "4579:71:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3130303030",
                        "id": 1938,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4637:5:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 1935,
                            "name": "_platformRewardBips",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1757,
                            "src": "4612:19:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 1933,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1928,
                            "src": "4596:11:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5497,
                          "src": "4596:15:14",
                          "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": 1936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4596:36:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1937,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5514,
                      "src": "4596:40:14",
                      "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": 1939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4596:47:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1932,
                  "id": 1940,
                  "nodeType": "Return",
                  "src": "4589:54:14"
                }
              ]
            },
            "id": 1942,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculatePlatformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1929,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1928,
                  "mutability": "mutable",
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1942,
                  "src": "4498:19:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1927,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4498:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4497:21:14"
            },
            "returnParameters": {
              "id": 1932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1931,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1942,
                  "src": "4566:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1930,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4566:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4565:9:14"
            },
            "scope": 2115,
            "src": "4465:185:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1963,
              "nodeType": "Block",
              "src": "4790:161:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1959,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1946,
                            "src": "4918:11:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1958,
                          "name": "calculatePlatformReward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1942,
                          "src": "4894:23:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 1960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4894:36:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 1954,
                                "name": "tokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1946,
                                "src": "4859:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1953,
                              "name": "calculatePoolReward",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1926,
                              "src": "4839:19:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 1955,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4839:32:14",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 1951,
                            "name": "startingBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1944,
                            "src": "4819:15:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5417,
                          "src": "4819:19:14",
                          "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": 1956,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4819:53:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5417,
                      "src": "4819:57:14",
                      "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": 1961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4819:125:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1950,
                  "id": 1962,
                  "nodeType": "Return",
                  "src": "4800:144:14"
                }
              ]
            },
            "id": 1964,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateExpectedBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1947,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1944,
                  "mutability": "mutable",
                  "name": "startingBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 1964,
                  "src": "4699:23:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4699:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1946,
                  "mutability": "mutable",
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1964,
                  "src": "4732:19:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1945,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4732:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4689:68:14"
            },
            "returnParameters": {
              "id": 1950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1949,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1964,
                  "src": "4781:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1948,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4781:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4780:9:14"
            },
            "scope": 2115,
            "src": "4656:295:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1983,
              "nodeType": "Block",
              "src": "5072:157:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1979,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1966,
                            "src": "5196:11:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1978,
                          "name": "calculatePlatformReward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1942,
                          "src": "5172:23:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 1980,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5172:36:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 1974,
                                "name": "tokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1966,
                                "src": "5137:11:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1973,
                              "name": "calculatePoolReward",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1926,
                              "src": "5117:19:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 1975,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5117:32:14",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 1971,
                            "name": "tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1966,
                            "src": "5101:11:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5417,
                          "src": "5101:15:14",
                          "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": 1976,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5101:49:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5417,
                      "src": "5101:53:14",
                      "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": 1981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5101:121:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1970,
                  "id": 1982,
                  "nodeType": "Return",
                  "src": "5082:140:14"
                }
              ]
            },
            "functionSelector": "b1197239",
            "id": 1984,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateRepaymentAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1967,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1966,
                  "mutability": "mutable",
                  "name": "tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1984,
                  "src": "4991:19:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1965,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4991:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4990:21:14"
            },
            "returnParameters": {
              "id": 1970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1969,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1984,
                  "src": "5059:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1968,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5059:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5058:9:14"
            },
            "scope": 2115,
            "src": "4957:272:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1991,
              "nodeType": "Block",
              "src": "5289:39:14",
              "statements": [
                {
                  "expression": {
                    "id": 1989,
                    "name": "_poolRewardBips",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1755,
                    "src": "5306:15:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1988,
                  "id": 1990,
                  "nodeType": "Return",
                  "src": "5299:22:14"
                }
              ]
            },
            "functionSelector": "fef10b95",
            "id": 1992,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "poolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1985,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5254:2:14"
            },
            "returnParameters": {
              "id": 1988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1987,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1992,
                  "src": "5280:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5280:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5279:9:14"
            },
            "scope": 2115,
            "src": "5235:93:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1999,
              "nodeType": "Block",
              "src": "5392:43:14",
              "statements": [
                {
                  "expression": {
                    "id": 1997,
                    "name": "_platformRewardBips",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1757,
                    "src": "5409:19:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1996,
                  "id": 1998,
                  "nodeType": "Return",
                  "src": "5402:26:14"
                }
              ]
            },
            "functionSelector": "fe6551b6",
            "id": 2000,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "platformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1993,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5357:2:14"
            },
            "returnParameters": {
              "id": 1996,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1995,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2000,
                  "src": "5383:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1994,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5383:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5382:9:14"
            },
            "scope": 2115,
            "src": "5334:101:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2007,
              "nodeType": "Block",
              "src": "5505:45:14",
              "statements": [
                {
                  "expression": {
                    "id": 2005,
                    "name": "_platformVaultAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1759,
                    "src": "5522:21:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2004,
                  "id": 2006,
                  "nodeType": "Return",
                  "src": "5515:28:14"
                }
              ]
            },
            "functionSelector": "5f39e93a",
            "id": 2008,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "platformVaultAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2001,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5470:2:14"
            },
            "returnParameters": {
              "id": 2004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2003,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2008,
                  "src": "5496:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2002,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5496:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5495:9:14"
            },
            "scope": 2115,
            "src": "5441:109:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2015,
              "nodeType": "Block",
              "src": "5605:28:14",
              "statements": [
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 2013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5622:4:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2012,
                  "id": 2014,
                  "nodeType": "Return",
                  "src": "5615:11:14"
                }
              ]
            },
            "functionSelector": "29d9109c",
            "id": 2016,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isKToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2009,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5573:2:14"
            },
            "returnParameters": {
              "id": 2012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2011,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2016,
                  "src": "5599:4:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2010,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5599:4:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5598:6:14"
            },
            "scope": 2115,
            "src": "5556:77:14",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              1154
            ],
            "body": {
              "id": 2024,
              "nodeType": "Block",
              "src": "5751:38:14",
              "statements": [
                {
                  "expression": {
                    "id": 2022,
                    "name": "_currentSender",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1761,
                    "src": "5768:14:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2021,
                  "id": 2023,
                  "nodeType": "Return",
                  "src": "5761:21:14"
                }
              ]
            },
            "functionSelector": "70348f3e",
            "id": 2025,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentSender",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2018,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5724:8:14"
            },
            "parameters": {
              "id": 2017,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5707:2:14"
            },
            "returnParameters": {
              "id": 2021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2020,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2025,
                  "src": "5742:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5742:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5741:9:14"
            },
            "scope": 2115,
            "src": "5685:104:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              1159
            ],
            "body": {
              "id": 2033,
              "nodeType": "Block",
              "src": "5867:35:14",
              "statements": [
                {
                  "expression": {
                    "id": 2031,
                    "name": "_underlying",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4927,
                    "src": "5884:11:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2030,
                  "id": 2032,
                  "nodeType": "Return",
                  "src": "5877:18:14"
                }
              ]
            },
            "functionSelector": "11eefd5d",
            "id": 2034,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentTokenAddress",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2027,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5840:8:14"
            },
            "parameters": {
              "id": 2026,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5823:2:14"
            },
            "returnParameters": {
              "id": 2030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2029,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2034,
                  "src": "5858:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2028,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5858:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5857:9:14"
            },
            "scope": 2115,
            "src": "5795:107:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              1164
            ],
            "body": {
              "id": 2042,
              "nodeType": "Block",
              "src": "5979:43:14",
              "statements": [
                {
                  "expression": {
                    "id": 2040,
                    "name": "_currentTokenAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1763,
                    "src": "5996:19:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2039,
                  "id": 2041,
                  "nodeType": "Return",
                  "src": "5989:26:14"
                }
              ]
            },
            "functionSelector": "ff69ac36",
            "id": 2043,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentTokenAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2036,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5952:8:14"
            },
            "parameters": {
              "id": 2035,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5935:2:14"
            },
            "returnParameters": {
              "id": 2039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2038,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2043,
                  "src": "5970:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2037,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5970:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5969:9:14"
            },
            "scope": 2115,
            "src": "5908:114:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              1169
            ],
            "body": {
              "id": 2055,
              "nodeType": "Block",
              "src": "6103:67:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2051,
                          "name": "totalReserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5174,
                          "src": "6148:12:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2052,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6148:14:14",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 2049,
                        "name": "_currentExpectedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1765,
                        "src": "6120:23:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5434,
                      "src": "6120:27:14",
                      "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": 2053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6120:43:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2048,
                  "id": 2054,
                  "nodeType": "Return",
                  "src": "6113:50:14"
                }
              ]
            },
            "functionSelector": "6f27e9d8",
            "id": 2056,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentRepaymentAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2045,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6076:8:14"
            },
            "parameters": {
              "id": 2044,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6059:2:14"
            },
            "returnParameters": {
              "id": 2048,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2047,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2056,
                  "src": "6094:7:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6094:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6093:9:14"
            },
            "scope": 2115,
            "src": "6028:142:14",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2067,
              "nodeType": "Block",
              "src": "6269:49:14",
              "statements": [
                {
                  "expression": {
                    "id": 2065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 2063,
                      "name": "_poolRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1755,
                      "src": "6279:15:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2064,
                      "name": "poolRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2058,
                      "src": "6297:14:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6279:32:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2066,
                  "nodeType": "ExpressionStatement",
                  "src": "6279:32:14"
                }
              ]
            },
            "functionSelector": "046e7913",
            "id": 2068,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 2061,
                "modifierName": {
                  "id": 2060,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5337,
                  "src": "6259:9:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6259:9:14"
              }
            ],
            "name": "setPoolReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2059,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2058,
                  "mutability": "mutable",
                  "name": "poolRewardBips",
                  "nodeType": "VariableDeclaration",
                  "scope": 2068,
                  "src": "6226:22:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2057,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6226:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6225:24:14"
            },
            "returnParameters": {
              "id": 2062,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6269:0:14"
            },
            "scope": 2115,
            "src": "6203:115:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2079,
              "nodeType": "Block",
              "src": "6398:57:14",
              "statements": [
                {
                  "expression": {
                    "id": 2077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 2075,
                      "name": "_platformRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1757,
                      "src": "6408:19:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2076,
                      "name": "platformRewardBips",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2070,
                      "src": "6430:18:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6408:40:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2078,
                  "nodeType": "ExpressionStatement",
                  "src": "6408:40:14"
                }
              ]
            },
            "functionSelector": "f35a37aa",
            "id": 2080,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 2073,
                "modifierName": {
                  "id": 2072,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5337,
                  "src": "6388:9:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6388:9:14"
              }
            ],
            "name": "setPlatformReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2070,
                  "mutability": "mutable",
                  "name": "platformRewardBips",
                  "nodeType": "VariableDeclaration",
                  "scope": 2080,
                  "src": "6351:26:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2069,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6351:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6350:28:14"
            },
            "returnParameters": {
              "id": 2074,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6398:0:14"
            },
            "scope": 2115,
            "src": "6324:131:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2091,
              "nodeType": "Block",
              "src": "6566:64:14",
              "statements": [
                {
                  "expression": {
                    "id": 2089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 2087,
                      "name": "_platformVaultAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1759,
                      "src": "6576:21:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2088,
                      "name": "newPlatformVaultAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2082,
                      "src": "6600:23:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6576:47:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2090,
                  "nodeType": "ExpressionStatement",
                  "src": "6576:47:14"
                }
              ]
            },
            "functionSelector": "b2551589",
            "id": 2092,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 2085,
                "modifierName": {
                  "id": 2084,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5337,
                  "src": "6552:9:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6552:9:14"
              }
            ],
            "name": "setPlatformVaultAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2083,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2082,
                  "mutability": "mutable",
                  "name": "newPlatformVaultAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2092,
                  "src": "6494:31:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2081,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6494:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6493:33:14"
            },
            "returnParameters": {
              "id": 2086,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6566:0:14"
            },
            "scope": 2115,
            "src": "6461:169:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2102,
              "nodeType": "Block",
              "src": "6686:25:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2099,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6238,
                      "src": "6696:6:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 2100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6696:8:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2101,
                  "nodeType": "ExpressionStatement",
                  "src": "6696:8:14"
                }
              ]
            },
            "functionSelector": "8456cb59",
            "id": 2103,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 2095,
                "modifierName": {
                  "id": 2094,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5337,
                  "src": "6662:9:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6662:9:14"
              },
              {
                "id": 2097,
                "modifierName": {
                  "id": 2096,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6212,
                  "src": "6672:13:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6672:13:14"
              }
            ],
            "name": "pause",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2093,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6650:2:14"
            },
            "returnParameters": {
              "id": 2098,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6686:0:14"
            },
            "scope": 2115,
            "src": "6636:75:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2113,
              "nodeType": "Block",
              "src": "6766:27:14",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2110,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6254,
                      "src": "6776:8:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 2111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6776:10:14",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2112,
                  "nodeType": "ExpressionStatement",
                  "src": "6776:10:14"
                }
              ]
            },
            "functionSelector": "3f4ba83a",
            "id": 2114,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 2106,
                "modifierName": {
                  "id": 2105,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5337,
                  "src": "6745:9:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6745:9:14"
              },
              {
                "id": 2108,
                "modifierName": {
                  "id": 2107,
                  "name": "whenPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6222,
                  "src": "6755:10:14",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6755:10:14"
              }
            ],
            "name": "unpause",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2104,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6733:2:14"
            },
            "returnParameters": {
              "id": 2109,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6766:0:14"
            },
            "scope": 2115,
            "src": "6717:76:14",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 2116,
        "src": "956:5839:14"
      }
    ],
    "src": "640:6156:14"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
      "exportedSymbols": {
        "CollateralizedToken": [
          5197
        ],
        "Context": [
          5279
        ],
        "ERC20": [
          6087
        ],
        "ExtendedMath": [
          1506
        ],
        "IERC20": [
          6165
        ],
        "IInvocationHook": [
          1170
        ],
        "IInvokable": [
          1178
        ],
        "KToken": [
          2115
        ],
        "Ownable": [
          5388
        ],
        "Pausable": [
          6255
        ],
        "ReentrancyGuard": [
          6295
        ],
        "SafeMath": [
          5584
        ],
        "UnlimitedApprovalErc20": [
          5256
        ]
      },
      "license": "Apache-2.0"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".0"
          ]
        },
        "id": 1718,
        "name": "PragmaDirective",
        "src": "640:23:14"
      },
      {
        "attributes": {
          "SourceUnit": 5585,
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "file": "@openzeppelin/contracts/math/SafeMath.sol",
          "scope": 2116,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1719,
        "name": "ImportDirective",
        "src": "665:51:14"
      },
      {
        "attributes": {
          "SourceUnit": 5389,
          "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
          "file": "@openzeppelin/contracts/access/Ownable.sol",
          "scope": 2116,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1720,
        "name": "ImportDirective",
        "src": "717:52:14"
      },
      {
        "attributes": {
          "SourceUnit": 6256,
          "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
          "file": "@openzeppelin/contracts/utils/Pausable.sol",
          "scope": 2116,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1721,
        "name": "ImportDirective",
        "src": "770:52:14"
      },
      {
        "attributes": {
          "SourceUnit": 5198,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol",
          "file": "../token/CollateralizedToken.sol",
          "scope": 2116,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1722,
        "name": "ImportDirective",
        "src": "823:42:14"
      },
      {
        "attributes": {
          "SourceUnit": 1171,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvocationHook.sol",
          "file": "../common/invoke/IInvocationHook.sol",
          "scope": 2116,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1723,
        "name": "ImportDirective",
        "src": "866:46:14"
      },
      {
        "attributes": {
          "SourceUnit": 1179,
          "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvokable.sol",
          "file": "../common/invoke/IInvokable.sol",
          "scope": 2116,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1724,
        "name": "ImportDirective",
        "src": "913:41:14"
      },
      {
        "attributes": {
          "abstract": true,
          "contractDependencies": [
            1170,
            1506,
            5197,
            5256,
            5279,
            5388,
            6087,
            6165,
            6255,
            6295
          ],
          "contractKind": "contract",
          "fullyImplemented": false,
          "linearizedBaseContracts": [
            2115,
            6255,
            5388,
            5197,
            1506,
            6295,
            5256,
            6087,
            6165,
            5279,
            1170
          ],
          "name": "KToken",
          "scope": 2116
        },
        "children": [
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "IInvocationHook",
                  "referencedDeclaration": 1170,
                  "type": "contract IInvocationHook"
                },
                "id": 1725,
                "name": "UserDefinedTypeName",
                "src": "988:15:14"
              }
            ],
            "id": 1726,
            "name": "InheritanceSpecifier",
            "src": "988:15:14"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "CollateralizedToken",
                  "referencedDeclaration": 5197,
                  "type": "contract CollateralizedToken"
                },
                "id": 1727,
                "name": "UserDefinedTypeName",
                "src": "1009:19:14"
              }
            ],
            "id": 1728,
            "name": "InheritanceSpecifier",
            "src": "1009:19:14"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "Ownable",
                  "referencedDeclaration": 5388,
                  "type": "contract Ownable"
                },
                "id": 1729,
                "name": "UserDefinedTypeName",
                "src": "1034:7:14"
              }
            ],
            "id": 1730,
            "name": "InheritanceSpecifier",
            "src": "1034:7:14"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "Pausable",
                  "referencedDeclaration": 6255,
                  "type": "contract Pausable"
                },
                "id": 1731,
                "name": "UserDefinedTypeName",
                "src": "1047:8:14"
              }
            ],
            "id": 1732,
            "name": "InheritanceSpecifier",
            "src": "1047:8:14"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "SafeMath",
                  "referencedDeclaration": 5584,
                  "type": "library SafeMath"
                },
                "id": 1733,
                "name": "UserDefinedTypeName",
                "src": "1068:8:14"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 1734,
                "name": "ElementaryTypeName",
                "src": "1081:7:14"
              }
            ],
            "id": 1735,
            "name": "UsingForDirective",
            "src": "1062:27:14"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "Invocation"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "invokeTo",
                      "scope": 1745,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1736,
                        "name": "ElementaryTypeName",
                        "src": "1121:7:14"
                      }
                    ],
                    "id": 1737,
                    "name": "VariableDeclaration",
                    "src": "1121:16:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "invokeValue",
                      "scope": 1745,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1738,
                        "name": "ElementaryTypeName",
                        "src": "1147:7:14"
                      }
                    ],
                    "id": 1739,
                    "name": "VariableDeclaration",
                    "src": "1147:19:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "invokeDataHash",
                      "scope": 1745,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 1740,
                        "name": "ElementaryTypeName",
                        "src": "1176:7:14"
                      }
                    ],
                    "id": 1741,
                    "name": "VariableDeclaration",
                    "src": "1176:22:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "underlyingAmount",
                      "scope": 1745,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1742,
                        "name": "ElementaryTypeName",
                        "src": "1208:7:14"
                      }
                    ],
                    "id": 1743,
                    "name": "VariableDeclaration",
                    "src": "1208:24:14"
                  }
                ],
                "id": 1744,
                "name": "ParameterList",
                "src": "1111:127:14"
              }
            ],
            "id": 1745,
            "name": "EventDefinition",
            "src": "1095:144:14"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "Reward"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "poolReward",
                      "scope": 1753,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1746,
                        "name": "ElementaryTypeName",
                        "src": "1266:7:14"
                      }
                    ],
                    "id": 1747,
                    "name": "VariableDeclaration",
                    "src": "1266:18:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "platformReward",
                      "scope": 1753,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1748,
                        "name": "ElementaryTypeName",
                        "src": "1294:7:14"
                      }
                    ],
                    "id": 1749,
                    "name": "VariableDeclaration",
                    "src": "1294:22:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "scope": 1753,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1750,
                        "name": "ElementaryTypeName",
                        "src": "1326:7:14"
                      }
                    ],
                    "id": 1751,
                    "name": "VariableDeclaration",
                    "src": "1326:20:14"
                  }
                ],
                "id": 1752,
                "name": "ParameterList",
                "src": "1256:96:14"
              }
            ],
            "id": 1753,
            "name": "EventDefinition",
            "src": "1244:109:14"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_poolRewardBips",
              "scope": 2115,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 1754,
                "name": "ElementaryTypeName",
                "src": "1422:7:14"
              }
            ],
            "id": 1755,
            "name": "VariableDeclaration",
            "src": "1422:32:14"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_platformRewardBips",
              "scope": 2115,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 1756,
                "name": "ElementaryTypeName",
                "src": "1528:7:14"
              }
            ],
            "id": 1757,
            "name": "VariableDeclaration",
            "src": "1528:36:14"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_platformVaultAddress",
              "scope": 2115,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 1758,
                "name": "ElementaryTypeName",
                "src": "1637:7:14"
              }
            ],
            "id": 1759,
            "name": "VariableDeclaration",
            "src": "1637:38:14"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_currentSender",
              "scope": 2115,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 1760,
                "name": "ElementaryTypeName",
                "src": "1741:7:14"
              }
            ],
            "id": 1761,
            "name": "VariableDeclaration",
            "src": "1741:31:14"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_currentTokenAmount",
              "scope": 2115,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 1762,
                "name": "ElementaryTypeName",
                "src": "1838:7:14"
              }
            ],
            "id": 1763,
            "name": "VariableDeclaration",
            "src": "1838:36:14"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_currentExpectedBalance",
              "scope": 2115,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 1764,
                "name": "ElementaryTypeName",
                "src": "1959:7:14"
              }
            ],
            "id": 1765,
            "name": "VariableDeclaration",
            "src": "1959:40:14"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 2115,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1766,
                "name": "ParameterList",
                "src": "2017:2:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1767,
                "name": "ParameterList",
                "src": "2020:0:14"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 1768,
                "name": "Block",
                "src": "2020:2:14"
              }
            ],
            "id": 1769,
            "name": "FunctionDefinition",
            "src": "2006:16:14"
          },
          {
            "attributes": {
              "functionSelector": "9e976db1",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "invoke",
              "scope": 2115,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "invokeTo",
                      "scope": 1880,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1770,
                        "name": "ElementaryTypeName",
                        "src": "2053:7:14"
                      }
                    ],
                    "id": 1771,
                    "name": "VariableDeclaration",
                    "src": "2053:16:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "invokeData",
                      "scope": 1880,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1772,
                        "name": "ElementaryTypeName",
                        "src": "2079:5:14"
                      }
                    ],
                    "id": 1773,
                    "name": "VariableDeclaration",
                    "src": "2079:25:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "underlyingAmount",
                      "scope": 1880,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1774,
                        "name": "ElementaryTypeName",
                        "src": "2114:7:14"
                      }
                    ],
                    "id": 1775,
                    "name": "VariableDeclaration",
                    "src": "2114:24:14"
                  }
                ],
                "id": 1776,
                "name": "ParameterList",
                "src": "2043:101:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1781,
                "name": "ParameterList",
                "src": "2189:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6294,
                      "type": "modifier ()",
                      "value": "nonReentrant"
                    },
                    "id": 1777,
                    "name": "Identifier",
                    "src": "2162:12:14"
                  }
                ],
                "id": 1778,
                "name": "ModifierInvocation",
                "src": "2162:12:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6212,
                      "type": "modifier ()",
                      "value": "whenNotPaused"
                    },
                    "id": 1779,
                    "name": "Identifier",
                    "src": "2175:13:14"
                  }
                ],
                "id": 1780,
                "name": "ModifierInvocation",
                "src": "2175:13:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_3d841e9495eb9aca67b9c767c4a03783461f65ceccd89be732f7fa54f6a79acd",
                                  "typeString": "literal_string \"KToken: cannot invoke this contract\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1782,
                            "name": "Identifier",
                            "src": "2199:7:14"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1771,
                                  "type": "address",
                                  "value": "invokeTo"
                                },
                                "id": 1783,
                                "name": "Identifier",
                                "src": "2220:8:14"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_KToken_$2115",
                                          "typeString": "contract KToken"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 1784,
                                        "name": "ElementaryTypeName",
                                        "src": "2232:7:14"
                                      }
                                    ],
                                    "id": 1785,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2232:7:14"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -28,
                                      "type": "contract KToken",
                                      "value": "this"
                                    },
                                    "id": 1786,
                                    "name": "Identifier",
                                    "src": "2240:4:14"
                                  }
                                ],
                                "id": 1787,
                                "name": "FunctionCall",
                                "src": "2232:13:14"
                              }
                            ],
                            "id": 1788,
                            "name": "BinaryOperation",
                            "src": "2220:25:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4b546f6b656e3a2063616e6e6f7420696e766f6b65207468697320636f6e7472616374",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"KToken: cannot invoke this contract\"",
                              "value": "KToken: cannot invoke this contract"
                            },
                            "id": 1789,
                            "name": "Literal",
                            "src": "2259:37:14"
                          }
                        ],
                        "id": 1790,
                        "name": "FunctionCall",
                        "src": "2199:107:14"
                      }
                    ],
                    "id": 1791,
                    "name": "ExpressionStatement",
                    "src": "2199:107:14"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1793
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "startingBalance",
                          "scope": 1879,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1792,
                            "name": "ElementaryTypeName",
                            "src": "2375:7:14"
                          }
                        ],
                        "id": 1793,
                        "name": "VariableDeclaration",
                        "src": "2375:23:14"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sub",
                              "referencedDeclaration": 5434,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5174,
                                      "type": "function () view returns (uint256)",
                                      "value": "totalReserve"
                                    },
                                    "id": 1794,
                                    "name": "Identifier",
                                    "src": "2401:12:14"
                                  }
                                ],
                                "id": 1795,
                                "name": "FunctionCall",
                                "src": "2401:14:14"
                              }
                            ],
                            "id": 1796,
                            "name": "MemberAccess",
                            "src": "2401:18:14"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1888,
                                  "type": "function () view returns (uint256)",
                                  "value": "payableReserveAdjustment"
                                },
                                "id": 1797,
                                "name": "Identifier",
                                "src": "2433:24:14"
                              }
                            ],
                            "id": 1798,
                            "name": "FunctionCall",
                            "src": "2433:26:14"
                          }
                        ],
                        "id": 1799,
                        "name": "FunctionCall",
                        "src": "2401:68:14"
                      }
                    ],
                    "id": 1800,
                    "name": "VariableDeclarationStatement",
                    "src": "2375:94:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1910,
                              "type": "function (address,uint256,uint256)",
                              "value": "setInvocationState"
                            },
                            "id": 1801,
                            "name": "Identifier",
                            "src": "2479:18:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1802,
                                "name": "Identifier",
                                "src": "2511:3:14"
                              }
                            ],
                            "id": 1803,
                            "name": "MemberAccess",
                            "src": "2511:10:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1775,
                              "type": "uint256",
                              "value": "underlyingAmount"
                            },
                            "id": 1804,
                            "name": "Identifier",
                            "src": "2535:16:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1964,
                                  "type": "function (uint256,uint256) view returns (uint256)",
                                  "value": "calculateExpectedBalance"
                                },
                                "id": 1805,
                                "name": "Identifier",
                                "src": "2565:24:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1793,
                                  "type": "uint256",
                                  "value": "startingBalance"
                                },
                                "id": 1806,
                                "name": "Identifier",
                                "src": "2590:15:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1775,
                                  "type": "uint256",
                                  "value": "underlyingAmount"
                                },
                                "id": 1807,
                                "name": "Identifier",
                                "src": "2607:16:14"
                              }
                            ],
                            "id": 1808,
                            "name": "FunctionCall",
                            "src": "2565:59:14"
                          }
                        ],
                        "id": 1809,
                        "name": "FunctionCall",
                        "src": "2479:155:14"
                      }
                    ],
                    "id": 1810,
                    "name": "ExpressionStatement",
                    "src": "2479:155:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9a876903edbe61c9c9bb19657e7f4f284ed0b2ad443be8d0a136778f9de7160d",
                                  "typeString": "literal_string \"KToken: unable to transfer invocation amount\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1811,
                            "name": "Identifier",
                            "src": "2737:7:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5080,
                                  "type": "function (address,uint256) returns (bool)",
                                  "value": "transferUnderlying"
                                },
                                "id": 1812,
                                "name": "Identifier",
                                "src": "2758:18:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1771,
                                  "type": "address",
                                  "value": "invokeTo"
                                },
                                "id": 1813,
                                "name": "Identifier",
                                "src": "2777:8:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1775,
                                  "type": "uint256",
                                  "value": "underlyingAmount"
                                },
                                "id": 1814,
                                "name": "Identifier",
                                "src": "2787:16:14"
                              }
                            ],
                            "id": 1815,
                            "name": "FunctionCall",
                            "src": "2758:46:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4b546f6b656e3a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e74",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"KToken: unable to transfer invocation amount\"",
                              "value": "KToken: unable to transfer invocation amount"
                            },
                            "id": 1816,
                            "name": "Literal",
                            "src": "2818:46:14"
                          }
                        ],
                        "id": 1817,
                        "name": "FunctionCall",
                        "src": "2737:137:14"
                      }
                    ],
                    "id": 1818,
                    "name": "ExpressionStatement",
                    "src": "2737:137:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "names": [
                                "value"
                              ],
                              "type": "function (bytes memory) payable external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "execute",
                                  "referencedDeclaration": 1177,
                                  "type": "function (bytes memory) payable external"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IInvokable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1178,
                                          "type": "type(contract IInvokable)",
                                          "value": "IInvokable"
                                        },
                                        "id": 1819,
                                        "name": "Identifier",
                                        "src": "2924:10:14"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1771,
                                          "type": "address",
                                          "value": "invokeTo"
                                        },
                                        "id": 1820,
                                        "name": "Identifier",
                                        "src": "2935:8:14"
                                      }
                                    ],
                                    "id": 1821,
                                    "name": "FunctionCall",
                                    "src": "2924:20:14"
                                  }
                                ],
                                "id": 1822,
                                "name": "MemberAccess",
                                "src": "2924:28:14"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 1823,
                                    "name": "Identifier",
                                    "src": "2960:3:14"
                                  }
                                ],
                                "id": 1824,
                                "name": "MemberAccess",
                                "src": "2960:9:14"
                              }
                            ],
                            "id": 1825,
                            "name": "FunctionCallOptions",
                            "src": "2924:46:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1773,
                              "type": "bytes calldata",
                              "value": "invokeData"
                            },
                            "id": 1826,
                            "name": "Identifier",
                            "src": "2971:10:14"
                          }
                        ],
                        "id": 1827,
                        "name": "FunctionCall",
                        "src": "2924:58:14"
                      }
                    ],
                    "id": 1828,
                    "name": "ExpressionStatement",
                    "src": "2924:58:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1745,
                              "type": "function (address,uint256,bytes32,uint256)",
                              "value": "Invocation"
                            },
                            "id": 1829,
                            "name": "Identifier",
                            "src": "2997:10:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1771,
                              "type": "address",
                              "value": "invokeTo"
                            },
                            "id": 1830,
                            "name": "Identifier",
                            "src": "3021:8:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "value",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1831,
                                "name": "Identifier",
                                "src": "3043:3:14"
                              }
                            ],
                            "id": 1832,
                            "name": "MemberAccess",
                            "src": "3043:9:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -8,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "keccak256"
                                },
                                "id": 1833,
                                "name": "Identifier",
                                "src": "3066:9:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1773,
                                  "type": "bytes calldata",
                                  "value": "invokeData"
                                },
                                "id": 1834,
                                "name": "Identifier",
                                "src": "3076:10:14"
                              }
                            ],
                            "id": 1835,
                            "name": "FunctionCall",
                            "src": "3066:21:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1775,
                              "type": "uint256",
                              "value": "underlyingAmount"
                            },
                            "id": 1836,
                            "name": "Identifier",
                            "src": "3101:16:14"
                          }
                        ],
                        "id": 1837,
                        "name": "FunctionCall",
                        "src": "2997:130:14"
                      }
                    ],
                    "id": 1838,
                    "name": "EmitStatement",
                    "src": "2992:135:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_0992a0a38e0987f3f154612fd783c1937b8b2184454595eb3eee36f99858ff3b",
                                  "typeString": "literal_string \"KToken: incorrect ending balance\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1839,
                            "name": "Identifier",
                            "src": "3200:7:14"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5174,
                                      "type": "function () view returns (uint256)",
                                      "value": "totalReserve"
                                    },
                                    "id": 1840,
                                    "name": "Identifier",
                                    "src": "3221:12:14"
                                  }
                                ],
                                "id": 1841,
                                "name": "FunctionCall",
                                "src": "3221:14:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1765,
                                  "type": "uint256",
                                  "value": "_currentExpectedBalance"
                                },
                                "id": 1842,
                                "name": "Identifier",
                                "src": "3239:23:14"
                              }
                            ],
                            "id": 1843,
                            "name": "BinaryOperation",
                            "src": "3221:41:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4b546f6b656e3a20696e636f727265637420656e64696e672062616c616e6365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"KToken: incorrect ending balance\"",
                              "value": "KToken: incorrect ending balance"
                            },
                            "id": 1844,
                            "name": "Literal",
                            "src": "3276:34:14"
                          }
                        ],
                        "id": 1845,
                        "name": "FunctionCall",
                        "src": "3200:120:14"
                      }
                    ],
                    "id": 1846,
                    "name": "ExpressionStatement",
                    "src": "3200:120:14"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1848
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "platformReward",
                          "scope": 1879,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1847,
                            "name": "ElementaryTypeName",
                            "src": "3369:7:14"
                          }
                        ],
                        "id": 1848,
                        "name": "VariableDeclaration",
                        "src": "3369:22:14"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1942,
                              "type": "function (uint256) view returns (uint256)",
                              "value": "calculatePlatformReward"
                            },
                            "id": 1849,
                            "name": "Identifier",
                            "src": "3394:23:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1775,
                              "type": "uint256",
                              "value": "underlyingAmount"
                            },
                            "id": 1850,
                            "name": "Identifier",
                            "src": "3418:16:14"
                          }
                        ],
                        "id": 1851,
                        "name": "FunctionCall",
                        "src": "3394:41:14"
                      }
                    ],
                    "id": 1852,
                    "name": "VariableDeclarationStatement",
                    "src": "3369:66:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_bf7cd392b81f131d7dd401c8cb1824a8d9e742896f54853b90886c17ebc8d33c",
                                  "typeString": "literal_string \"KToken: unable to transfer platform reward\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1853,
                            "name": "Identifier",
                            "src": "3446:7:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5080,
                                  "type": "function (address,uint256) returns (bool)",
                                  "value": "transferUnderlying"
                                },
                                "id": 1854,
                                "name": "Identifier",
                                "src": "3467:18:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1759,
                                  "type": "address",
                                  "value": "_platformVaultAddress"
                                },
                                "id": 1855,
                                "name": "Identifier",
                                "src": "3486:21:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1848,
                                  "type": "uint256",
                                  "value": "platformReward"
                                },
                                "id": 1856,
                                "name": "Identifier",
                                "src": "3509:14:14"
                              }
                            ],
                            "id": 1857,
                            "name": "FunctionCall",
                            "src": "3467:57:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4b546f6b656e3a20756e61626c6520746f207472616e7366657220706c6174666f726d20726577617264",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"KToken: unable to transfer platform reward\"",
                              "value": "KToken: unable to transfer platform reward"
                            },
                            "id": 1858,
                            "name": "Literal",
                            "src": "3538:44:14"
                          }
                        ],
                        "id": 1859,
                        "name": "FunctionCall",
                        "src": "3446:146:14"
                      }
                    ],
                    "id": 1860,
                    "name": "ExpressionStatement",
                    "src": "3446:146:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1753,
                              "type": "function (uint256,uint256,address)",
                              "value": "Reward"
                            },
                            "id": 1861,
                            "name": "Identifier",
                            "src": "3607:6:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1926,
                                  "type": "function (uint256) view returns (uint256)",
                                  "value": "calculatePoolReward"
                                },
                                "id": 1862,
                                "name": "Identifier",
                                "src": "3627:19:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1775,
                                  "type": "uint256",
                                  "value": "underlyingAmount"
                                },
                                "id": 1863,
                                "name": "Identifier",
                                "src": "3647:16:14"
                              }
                            ],
                            "id": 1864,
                            "name": "FunctionCall",
                            "src": "3627:37:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1848,
                              "type": "uint256",
                              "value": "platformReward"
                            },
                            "id": 1865,
                            "name": "Identifier",
                            "src": "3678:14:14"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5196,
                                  "type": "function () view returns (address)",
                                  "value": "underlying"
                                },
                                "id": 1866,
                                "name": "Identifier",
                                "src": "3706:10:14"
                              }
                            ],
                            "id": 1867,
                            "name": "FunctionCall",
                            "src": "3706:12:14"
                          }
                        ],
                        "id": 1868,
                        "name": "FunctionCall",
                        "src": "3607:121:14"
                      }
                    ],
                    "id": 1869,
                    "name": "EmitStatement",
                    "src": "3602:126:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1910,
                              "type": "function (address,uint256,uint256)",
                              "value": "setInvocationState"
                            },
                            "id": 1870,
                            "name": "Identifier",
                            "src": "3779:18:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 1871,
                                    "name": "ElementaryTypeName",
                                    "src": "3798:7:14"
                                  }
                                ],
                                "id": 1872,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3798:7:14"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1873,
                                "name": "Literal",
                                "src": "3806:1:14"
                              }
                            ],
                            "id": 1874,
                            "name": "FunctionCall",
                            "src": "3798:10:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1875,
                            "name": "Literal",
                            "src": "3810:1:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1876,
                            "name": "Literal",
                            "src": "3813:1:14"
                          }
                        ],
                        "id": 1877,
                        "name": "FunctionCall",
                        "src": "3779:36:14"
                      }
                    ],
                    "id": 1878,
                    "name": "ExpressionStatement",
                    "src": "3779:36:14"
                  }
                ],
                "id": 1879,
                "name": "Block",
                "src": "2189:1633:14"
              }
            ],
            "id": 1880,
            "name": "FunctionDefinition",
            "src": "2028:1794:14"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "payableReserveAdjustment",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1881,
                "name": "ParameterList",
                "src": "3861:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1888,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1882,
                        "name": "ElementaryTypeName",
                        "src": "3927:7:14"
                      }
                    ],
                    "id": 1883,
                    "name": "VariableDeclaration",
                    "src": "3927:7:14"
                  }
                ],
                "id": 1884,
                "name": "ParameterList",
                "src": "3926:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1884
                    },
                    "children": [
                      {
                        "attributes": {
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 1885,
                        "name": "Literal",
                        "src": "3957:1:14"
                      }
                    ],
                    "id": 1886,
                    "name": "Return",
                    "src": "3950:8:14"
                  }
                ],
                "id": 1887,
                "name": "Block",
                "src": "3940:25:14"
              }
            ],
            "id": 1888,
            "name": "FunctionDefinition",
            "src": "3828:137:14"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setInvocationState",
              "scope": 2115,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "currentSender",
                      "scope": 1910,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1889,
                        "name": "ElementaryTypeName",
                        "src": "4008:7:14"
                      }
                    ],
                    "id": 1890,
                    "name": "VariableDeclaration",
                    "src": "4008:21:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "currentTokenAmount",
                      "scope": 1910,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1891,
                        "name": "ElementaryTypeName",
                        "src": "4039:7:14"
                      }
                    ],
                    "id": 1892,
                    "name": "VariableDeclaration",
                    "src": "4039:26:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "currentExpectedBalance",
                      "scope": 1910,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1893,
                        "name": "ElementaryTypeName",
                        "src": "4075:7:14"
                      }
                    ],
                    "id": 1894,
                    "name": "VariableDeclaration",
                    "src": "4075:30:14"
                  }
                ],
                "id": 1895,
                "name": "ParameterList",
                "src": "3998:113:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1896,
                "name": "ParameterList",
                "src": "4121:0:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1761,
                              "type": "address",
                              "value": "_currentSender"
                            },
                            "id": 1897,
                            "name": "Identifier",
                            "src": "4131:14:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1890,
                              "type": "address",
                              "value": "currentSender"
                            },
                            "id": 1898,
                            "name": "Identifier",
                            "src": "4148:13:14"
                          }
                        ],
                        "id": 1899,
                        "name": "Assignment",
                        "src": "4131:30:14"
                      }
                    ],
                    "id": 1900,
                    "name": "ExpressionStatement",
                    "src": "4131:30:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1763,
                              "type": "uint256",
                              "value": "_currentTokenAmount"
                            },
                            "id": 1901,
                            "name": "Identifier",
                            "src": "4171:19:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1892,
                              "type": "uint256",
                              "value": "currentTokenAmount"
                            },
                            "id": 1902,
                            "name": "Identifier",
                            "src": "4193:18:14"
                          }
                        ],
                        "id": 1903,
                        "name": "Assignment",
                        "src": "4171:40:14"
                      }
                    ],
                    "id": 1904,
                    "name": "ExpressionStatement",
                    "src": "4171:40:14"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1765,
                              "type": "uint256",
                              "value": "_currentExpectedBalance"
                            },
                            "id": 1905,
                            "name": "Identifier",
                            "src": "4221:23:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1894,
                              "type": "uint256",
                              "value": "currentExpectedBalance"
                            },
                            "id": 1906,
                            "name": "Identifier",
                            "src": "4247:22:14"
                          }
                        ],
                        "id": 1907,
                        "name": "Assignment",
                        "src": "4221:48:14"
                      }
                    ],
                    "id": 1908,
                    "name": "ExpressionStatement",
                    "src": "4221:48:14"
                  }
                ],
                "id": 1909,
                "name": "Block",
                "src": "4121:155:14"
              }
            ],
            "id": 1910,
            "name": "FunctionDefinition",
            "src": "3971:305:14"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "calculatePoolReward",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "scope": 1926,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1911,
                        "name": "ElementaryTypeName",
                        "src": "4311:7:14"
                      }
                    ],
                    "id": 1912,
                    "name": "VariableDeclaration",
                    "src": "4311:19:14"
                  }
                ],
                "id": 1913,
                "name": "ParameterList",
                "src": "4310:21:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1926,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1914,
                        "name": "ElementaryTypeName",
                        "src": "4379:7:14"
                      }
                    ],
                    "id": 1915,
                    "name": "VariableDeclaration",
                    "src": "4379:7:14"
                  }
                ],
                "id": 1916,
                "name": "ParameterList",
                "src": "4378:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1916
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "div",
                              "referencedDeclaration": 5514,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 5497,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1912,
                                          "type": "uint256",
                                          "value": "tokenAmount"
                                        },
                                        "id": 1917,
                                        "name": "Identifier",
                                        "src": "4409:11:14"
                                      }
                                    ],
                                    "id": 1918,
                                    "name": "MemberAccess",
                                    "src": "4409:15:14"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1755,
                                      "type": "uint256",
                                      "value": "_poolRewardBips"
                                    },
                                    "id": 1919,
                                    "name": "Identifier",
                                    "src": "4425:15:14"
                                  }
                                ],
                                "id": 1920,
                                "name": "FunctionCall",
                                "src": "4409:32:14"
                              }
                            ],
                            "id": 1921,
                            "name": "MemberAccess",
                            "src": "4409:36:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3130303030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 10000",
                              "value": "10000"
                            },
                            "id": 1922,
                            "name": "Literal",
                            "src": "4446:5:14"
                          }
                        ],
                        "id": 1923,
                        "name": "FunctionCall",
                        "src": "4409:43:14"
                      }
                    ],
                    "id": 1924,
                    "name": "Return",
                    "src": "4402:50:14"
                  }
                ],
                "id": 1925,
                "name": "Block",
                "src": "4392:67:14"
              }
            ],
            "id": 1926,
            "name": "FunctionDefinition",
            "src": "4282:177:14"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "calculatePlatformReward",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "scope": 1942,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1927,
                        "name": "ElementaryTypeName",
                        "src": "4498:7:14"
                      }
                    ],
                    "id": 1928,
                    "name": "VariableDeclaration",
                    "src": "4498:19:14"
                  }
                ],
                "id": 1929,
                "name": "ParameterList",
                "src": "4497:21:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1942,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1930,
                        "name": "ElementaryTypeName",
                        "src": "4566:7:14"
                      }
                    ],
                    "id": 1931,
                    "name": "VariableDeclaration",
                    "src": "4566:7:14"
                  }
                ],
                "id": 1932,
                "name": "ParameterList",
                "src": "4565:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1932
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "div",
                              "referencedDeclaration": 5514,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 5497,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1928,
                                          "type": "uint256",
                                          "value": "tokenAmount"
                                        },
                                        "id": 1933,
                                        "name": "Identifier",
                                        "src": "4596:11:14"
                                      }
                                    ],
                                    "id": 1934,
                                    "name": "MemberAccess",
                                    "src": "4596:15:14"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1757,
                                      "type": "uint256",
                                      "value": "_platformRewardBips"
                                    },
                                    "id": 1935,
                                    "name": "Identifier",
                                    "src": "4612:19:14"
                                  }
                                ],
                                "id": 1936,
                                "name": "FunctionCall",
                                "src": "4596:36:14"
                              }
                            ],
                            "id": 1937,
                            "name": "MemberAccess",
                            "src": "4596:40:14"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3130303030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 10000",
                              "value": "10000"
                            },
                            "id": 1938,
                            "name": "Literal",
                            "src": "4637:5:14"
                          }
                        ],
                        "id": 1939,
                        "name": "FunctionCall",
                        "src": "4596:47:14"
                      }
                    ],
                    "id": 1940,
                    "name": "Return",
                    "src": "4589:54:14"
                  }
                ],
                "id": 1941,
                "name": "Block",
                "src": "4579:71:14"
              }
            ],
            "id": 1942,
            "name": "FunctionDefinition",
            "src": "4465:185:14"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "calculateExpectedBalance",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "startingBalance",
                      "scope": 1964,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1943,
                        "name": "ElementaryTypeName",
                        "src": "4699:7:14"
                      }
                    ],
                    "id": 1944,
                    "name": "VariableDeclaration",
                    "src": "4699:23:14"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "scope": 1964,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1945,
                        "name": "ElementaryTypeName",
                        "src": "4732:7:14"
                      }
                    ],
                    "id": 1946,
                    "name": "VariableDeclaration",
                    "src": "4732:19:14"
                  }
                ],
                "id": 1947,
                "name": "ParameterList",
                "src": "4689:68:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1964,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1948,
                        "name": "ElementaryTypeName",
                        "src": "4781:7:14"
                      }
                    ],
                    "id": 1949,
                    "name": "VariableDeclaration",
                    "src": "4781:7:14"
                  }
                ],
                "id": 1950,
                "name": "ParameterList",
                "src": "4780:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1950
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "add",
                              "referencedDeclaration": 5417,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "add",
                                      "referencedDeclaration": 5417,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1944,
                                          "type": "uint256",
                                          "value": "startingBalance"
                                        },
                                        "id": 1951,
                                        "name": "Identifier",
                                        "src": "4819:15:14"
                                      }
                                    ],
                                    "id": 1952,
                                    "name": "MemberAccess",
                                    "src": "4819:19:14"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1926,
                                          "type": "function (uint256) view returns (uint256)",
                                          "value": "calculatePoolReward"
                                        },
                                        "id": 1953,
                                        "name": "Identifier",
                                        "src": "4839:19:14"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1946,
                                          "type": "uint256",
                                          "value": "tokenAmount"
                                        },
                                        "id": 1954,
                                        "name": "Identifier",
                                        "src": "4859:11:14"
                                      }
                                    ],
                                    "id": 1955,
                                    "name": "FunctionCall",
                                    "src": "4839:32:14"
                                  }
                                ],
                                "id": 1956,
                                "name": "FunctionCall",
                                "src": "4819:53:14"
                              }
                            ],
                            "id": 1957,
                            "name": "MemberAccess",
                            "src": "4819:57:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1942,
                                  "type": "function (uint256) view returns (uint256)",
                                  "value": "calculatePlatformReward"
                                },
                                "id": 1958,
                                "name": "Identifier",
                                "src": "4894:23:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1946,
                                  "type": "uint256",
                                  "value": "tokenAmount"
                                },
                                "id": 1959,
                                "name": "Identifier",
                                "src": "4918:11:14"
                              }
                            ],
                            "id": 1960,
                            "name": "FunctionCall",
                            "src": "4894:36:14"
                          }
                        ],
                        "id": 1961,
                        "name": "FunctionCall",
                        "src": "4819:125:14"
                      }
                    ],
                    "id": 1962,
                    "name": "Return",
                    "src": "4800:144:14"
                  }
                ],
                "id": 1963,
                "name": "Block",
                "src": "4790:161:14"
              }
            ],
            "id": 1964,
            "name": "FunctionDefinition",
            "src": "4656:295:14"
          },
          {
            "attributes": {
              "functionSelector": "b1197239",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "calculateRepaymentAmount",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "scope": 1984,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1965,
                        "name": "ElementaryTypeName",
                        "src": "4991:7:14"
                      }
                    ],
                    "id": 1966,
                    "name": "VariableDeclaration",
                    "src": "4991:19:14"
                  }
                ],
                "id": 1967,
                "name": "ParameterList",
                "src": "4990:21:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1984,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1968,
                        "name": "ElementaryTypeName",
                        "src": "5059:7:14"
                      }
                    ],
                    "id": 1969,
                    "name": "VariableDeclaration",
                    "src": "5059:7:14"
                  }
                ],
                "id": 1970,
                "name": "ParameterList",
                "src": "5058:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1970
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "add",
                              "referencedDeclaration": 5417,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "add",
                                      "referencedDeclaration": 5417,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1966,
                                          "type": "uint256",
                                          "value": "tokenAmount"
                                        },
                                        "id": 1971,
                                        "name": "Identifier",
                                        "src": "5101:11:14"
                                      }
                                    ],
                                    "id": 1972,
                                    "name": "MemberAccess",
                                    "src": "5101:15:14"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1926,
                                          "type": "function (uint256) view returns (uint256)",
                                          "value": "calculatePoolReward"
                                        },
                                        "id": 1973,
                                        "name": "Identifier",
                                        "src": "5117:19:14"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1966,
                                          "type": "uint256",
                                          "value": "tokenAmount"
                                        },
                                        "id": 1974,
                                        "name": "Identifier",
                                        "src": "5137:11:14"
                                      }
                                    ],
                                    "id": 1975,
                                    "name": "FunctionCall",
                                    "src": "5117:32:14"
                                  }
                                ],
                                "id": 1976,
                                "name": "FunctionCall",
                                "src": "5101:49:14"
                              }
                            ],
                            "id": 1977,
                            "name": "MemberAccess",
                            "src": "5101:53:14"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1942,
                                  "type": "function (uint256) view returns (uint256)",
                                  "value": "calculatePlatformReward"
                                },
                                "id": 1978,
                                "name": "Identifier",
                                "src": "5172:23:14"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1966,
                                  "type": "uint256",
                                  "value": "tokenAmount"
                                },
                                "id": 1979,
                                "name": "Identifier",
                                "src": "5196:11:14"
                              }
                            ],
                            "id": 1980,
                            "name": "FunctionCall",
                            "src": "5172:36:14"
                          }
                        ],
                        "id": 1981,
                        "name": "FunctionCall",
                        "src": "5101:121:14"
                      }
                    ],
                    "id": 1982,
                    "name": "Return",
                    "src": "5082:140:14"
                  }
                ],
                "id": 1983,
                "name": "Block",
                "src": "5072:157:14"
              }
            ],
            "id": 1984,
            "name": "FunctionDefinition",
            "src": "4957:272:14"
          },
          {
            "attributes": {
              "functionSelector": "fef10b95",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "poolReward",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1985,
                "name": "ParameterList",
                "src": "5254:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1992,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1986,
                        "name": "ElementaryTypeName",
                        "src": "5280:7:14"
                      }
                    ],
                    "id": 1987,
                    "name": "VariableDeclaration",
                    "src": "5280:7:14"
                  }
                ],
                "id": 1988,
                "name": "ParameterList",
                "src": "5279:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1988
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1755,
                          "type": "uint256",
                          "value": "_poolRewardBips"
                        },
                        "id": 1989,
                        "name": "Identifier",
                        "src": "5306:15:14"
                      }
                    ],
                    "id": 1990,
                    "name": "Return",
                    "src": "5299:22:14"
                  }
                ],
                "id": 1991,
                "name": "Block",
                "src": "5289:39:14"
              }
            ],
            "id": 1992,
            "name": "FunctionDefinition",
            "src": "5235:93:14"
          },
          {
            "attributes": {
              "functionSelector": "fe6551b6",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "platformReward",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1993,
                "name": "ParameterList",
                "src": "5357:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2000,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1994,
                        "name": "ElementaryTypeName",
                        "src": "5383:7:14"
                      }
                    ],
                    "id": 1995,
                    "name": "VariableDeclaration",
                    "src": "5383:7:14"
                  }
                ],
                "id": 1996,
                "name": "ParameterList",
                "src": "5382:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1996
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1757,
                          "type": "uint256",
                          "value": "_platformRewardBips"
                        },
                        "id": 1997,
                        "name": "Identifier",
                        "src": "5409:19:14"
                      }
                    ],
                    "id": 1998,
                    "name": "Return",
                    "src": "5402:26:14"
                  }
                ],
                "id": 1999,
                "name": "Block",
                "src": "5392:43:14"
              }
            ],
            "id": 2000,
            "name": "FunctionDefinition",
            "src": "5334:101:14"
          },
          {
            "attributes": {
              "functionSelector": "5f39e93a",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "platformVaultAddress",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2001,
                "name": "ParameterList",
                "src": "5470:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2008,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2002,
                        "name": "ElementaryTypeName",
                        "src": "5496:7:14"
                      }
                    ],
                    "id": 2003,
                    "name": "VariableDeclaration",
                    "src": "5496:7:14"
                  }
                ],
                "id": 2004,
                "name": "ParameterList",
                "src": "5495:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2004
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1759,
                          "type": "address",
                          "value": "_platformVaultAddress"
                        },
                        "id": 2005,
                        "name": "Identifier",
                        "src": "5522:21:14"
                      }
                    ],
                    "id": 2006,
                    "name": "Return",
                    "src": "5515:28:14"
                  }
                ],
                "id": 2007,
                "name": "Block",
                "src": "5505:45:14"
              }
            ],
            "id": 2008,
            "name": "FunctionDefinition",
            "src": "5441:109:14"
          },
          {
            "attributes": {
              "functionSelector": "29d9109c",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isKToken",
              "scope": 2115,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2009,
                "name": "ParameterList",
                "src": "5573:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2016,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 2010,
                        "name": "ElementaryTypeName",
                        "src": "5599:4:14"
                      }
                    ],
                    "id": 2011,
                    "name": "VariableDeclaration",
                    "src": "5599:4:14"
                  }
                ],
                "id": 2012,
                "name": "ParameterList",
                "src": "5598:6:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2012
                    },
                    "children": [
                      {
                        "attributes": {
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 2013,
                        "name": "Literal",
                        "src": "5622:4:14"
                      }
                    ],
                    "id": 2014,
                    "name": "Return",
                    "src": "5615:11:14"
                  }
                ],
                "id": 2015,
                "name": "Block",
                "src": "5605:28:14"
              }
            ],
            "id": 2016,
            "name": "FunctionDefinition",
            "src": "5556:77:14"
          },
          {
            "attributes": {
              "baseFunctions": [
                1154
              ],
              "functionSelector": "70348f3e",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "currentSender",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2018,
                "name": "OverrideSpecifier",
                "src": "5724:8:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2017,
                "name": "ParameterList",
                "src": "5707:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2025,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2019,
                        "name": "ElementaryTypeName",
                        "src": "5742:7:14"
                      }
                    ],
                    "id": 2020,
                    "name": "VariableDeclaration",
                    "src": "5742:7:14"
                  }
                ],
                "id": 2021,
                "name": "ParameterList",
                "src": "5741:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2021
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1761,
                          "type": "address",
                          "value": "_currentSender"
                        },
                        "id": 2022,
                        "name": "Identifier",
                        "src": "5768:14:14"
                      }
                    ],
                    "id": 2023,
                    "name": "Return",
                    "src": "5761:21:14"
                  }
                ],
                "id": 2024,
                "name": "Block",
                "src": "5751:38:14"
              }
            ],
            "id": 2025,
            "name": "FunctionDefinition",
            "src": "5685:104:14"
          },
          {
            "attributes": {
              "baseFunctions": [
                1159
              ],
              "functionSelector": "11eefd5d",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "currentTokenAddress",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2027,
                "name": "OverrideSpecifier",
                "src": "5840:8:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2026,
                "name": "ParameterList",
                "src": "5823:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2034,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2028,
                        "name": "ElementaryTypeName",
                        "src": "5858:7:14"
                      }
                    ],
                    "id": 2029,
                    "name": "VariableDeclaration",
                    "src": "5858:7:14"
                  }
                ],
                "id": 2030,
                "name": "ParameterList",
                "src": "5857:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2030
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 4927,
                          "type": "address",
                          "value": "_underlying"
                        },
                        "id": 2031,
                        "name": "Identifier",
                        "src": "5884:11:14"
                      }
                    ],
                    "id": 2032,
                    "name": "Return",
                    "src": "5877:18:14"
                  }
                ],
                "id": 2033,
                "name": "Block",
                "src": "5867:35:14"
              }
            ],
            "id": 2034,
            "name": "FunctionDefinition",
            "src": "5795:107:14"
          },
          {
            "attributes": {
              "baseFunctions": [
                1164
              ],
              "functionSelector": "ff69ac36",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "currentTokenAmount",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2036,
                "name": "OverrideSpecifier",
                "src": "5952:8:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2035,
                "name": "ParameterList",
                "src": "5935:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2043,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2037,
                        "name": "ElementaryTypeName",
                        "src": "5970:7:14"
                      }
                    ],
                    "id": 2038,
                    "name": "VariableDeclaration",
                    "src": "5970:7:14"
                  }
                ],
                "id": 2039,
                "name": "ParameterList",
                "src": "5969:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2039
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1763,
                          "type": "uint256",
                          "value": "_currentTokenAmount"
                        },
                        "id": 2040,
                        "name": "Identifier",
                        "src": "5996:19:14"
                      }
                    ],
                    "id": 2041,
                    "name": "Return",
                    "src": "5989:26:14"
                  }
                ],
                "id": 2042,
                "name": "Block",
                "src": "5979:43:14"
              }
            ],
            "id": 2043,
            "name": "FunctionDefinition",
            "src": "5908:114:14"
          },
          {
            "attributes": {
              "baseFunctions": [
                1169
              ],
              "functionSelector": "6f27e9d8",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "currentRepaymentAmount",
              "scope": 2115,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2045,
                "name": "OverrideSpecifier",
                "src": "6076:8:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2044,
                "name": "ParameterList",
                "src": "6059:2:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2056,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2046,
                        "name": "ElementaryTypeName",
                        "src": "6094:7:14"
                      }
                    ],
                    "id": 2047,
                    "name": "VariableDeclaration",
                    "src": "6094:7:14"
                  }
                ],
                "id": 2048,
                "name": "ParameterList",
                "src": "6093:9:14"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2048
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sub",
                              "referencedDeclaration": 5434,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1765,
                                  "type": "uint256",
                                  "value": "_currentExpectedBalance"
                                },
                                "id": 2049,
                                "name": "Identifier",
                                "src": "6120:23:14"
                              }
                            ],
                            "id": 2050,
                            "name": "MemberAccess",
                            "src": "6120:27:14"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5174,
                                  "type": "function () view returns (uint256)",
                                  "value": "totalReserve"
                                },
                                "id": 2051,
                                "name": "Identifier",
                                "src": "6148:12:14"
                              }
                            ],
                            "id": 2052,
                            "name": "FunctionCall",
                            "src": "6148:14:14"
                          }
                        ],
                        "id": 2053,
                        "name": "FunctionCall",
                        "src": "6120:43:14"
                      }
                    ],
                    "id": 2054,
                    "name": "Return",
                    "src": "6113:50:14"
                  }
                ],
                "id": 2055,
                "name": "Block",
                "src": "6103:67:14"
              }
            ],
            "id": 2056,
            "name": "FunctionDefinition",
            "src": "6028:142:14"
          },
          {
            "attributes": {
              "functionSelector": "046e7913",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setPoolReward",
              "scope": 2115,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "poolRewardBips",
                      "scope": 2068,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2057,
                        "name": "ElementaryTypeName",
                        "src": "6226:7:14"
                      }
                    ],
                    "id": 2058,
                    "name": "VariableDeclaration",
                    "src": "6226:22:14"
                  }
                ],
                "id": 2059,
                "name": "ParameterList",
                "src": "6225:24:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2062,
                "name": "ParameterList",
                "src": "6269:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 5337,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 2060,
                    "name": "Identifier",
                    "src": "6259:9:14"
                  }
                ],
                "id": 2061,
                "name": "ModifierInvocation",
                "src": "6259:9:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1755,
                              "type": "uint256",
                              "value": "_poolRewardBips"
                            },
                            "id": 2063,
                            "name": "Identifier",
                            "src": "6279:15:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2058,
                              "type": "uint256",
                              "value": "poolRewardBips"
                            },
                            "id": 2064,
                            "name": "Identifier",
                            "src": "6297:14:14"
                          }
                        ],
                        "id": 2065,
                        "name": "Assignment",
                        "src": "6279:32:14"
                      }
                    ],
                    "id": 2066,
                    "name": "ExpressionStatement",
                    "src": "6279:32:14"
                  }
                ],
                "id": 2067,
                "name": "Block",
                "src": "6269:49:14"
              }
            ],
            "id": 2068,
            "name": "FunctionDefinition",
            "src": "6203:115:14"
          },
          {
            "attributes": {
              "functionSelector": "f35a37aa",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setPlatformReward",
              "scope": 2115,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "platformRewardBips",
                      "scope": 2080,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2069,
                        "name": "ElementaryTypeName",
                        "src": "6351:7:14"
                      }
                    ],
                    "id": 2070,
                    "name": "VariableDeclaration",
                    "src": "6351:26:14"
                  }
                ],
                "id": 2071,
                "name": "ParameterList",
                "src": "6350:28:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2074,
                "name": "ParameterList",
                "src": "6398:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 5337,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 2072,
                    "name": "Identifier",
                    "src": "6388:9:14"
                  }
                ],
                "id": 2073,
                "name": "ModifierInvocation",
                "src": "6388:9:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1757,
                              "type": "uint256",
                              "value": "_platformRewardBips"
                            },
                            "id": 2075,
                            "name": "Identifier",
                            "src": "6408:19:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2070,
                              "type": "uint256",
                              "value": "platformRewardBips"
                            },
                            "id": 2076,
                            "name": "Identifier",
                            "src": "6430:18:14"
                          }
                        ],
                        "id": 2077,
                        "name": "Assignment",
                        "src": "6408:40:14"
                      }
                    ],
                    "id": 2078,
                    "name": "ExpressionStatement",
                    "src": "6408:40:14"
                  }
                ],
                "id": 2079,
                "name": "Block",
                "src": "6398:57:14"
              }
            ],
            "id": 2080,
            "name": "FunctionDefinition",
            "src": "6324:131:14"
          },
          {
            "attributes": {
              "functionSelector": "b2551589",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setPlatformVaultAddress",
              "scope": 2115,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "newPlatformVaultAddress",
                      "scope": 2092,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2081,
                        "name": "ElementaryTypeName",
                        "src": "6494:7:14"
                      }
                    ],
                    "id": 2082,
                    "name": "VariableDeclaration",
                    "src": "6494:31:14"
                  }
                ],
                "id": 2083,
                "name": "ParameterList",
                "src": "6493:33:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2086,
                "name": "ParameterList",
                "src": "6566:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 5337,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 2084,
                    "name": "Identifier",
                    "src": "6552:9:14"
                  }
                ],
                "id": 2085,
                "name": "ModifierInvocation",
                "src": "6552:9:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1759,
                              "type": "address",
                              "value": "_platformVaultAddress"
                            },
                            "id": 2087,
                            "name": "Identifier",
                            "src": "6576:21:14"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2082,
                              "type": "address",
                              "value": "newPlatformVaultAddress"
                            },
                            "id": 2088,
                            "name": "Identifier",
                            "src": "6600:23:14"
                          }
                        ],
                        "id": 2089,
                        "name": "Assignment",
                        "src": "6576:47:14"
                      }
                    ],
                    "id": 2090,
                    "name": "ExpressionStatement",
                    "src": "6576:47:14"
                  }
                ],
                "id": 2091,
                "name": "Block",
                "src": "6566:64:14"
              }
            ],
            "id": 2092,
            "name": "FunctionDefinition",
            "src": "6461:169:14"
          },
          {
            "attributes": {
              "functionSelector": "8456cb59",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "pause",
              "scope": 2115,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2093,
                "name": "ParameterList",
                "src": "6650:2:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2098,
                "name": "ParameterList",
                "src": "6686:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 5337,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 2094,
                    "name": "Identifier",
                    "src": "6662:9:14"
                  }
                ],
                "id": 2095,
                "name": "ModifierInvocation",
                "src": "6662:9:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6212,
                      "type": "modifier ()",
                      "value": "whenNotPaused"
                    },
                    "id": 2096,
                    "name": "Identifier",
                    "src": "6672:13:14"
                  }
                ],
                "id": 2097,
                "name": "ModifierInvocation",
                "src": "6672:13:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6238,
                              "type": "function ()",
                              "value": "_pause"
                            },
                            "id": 2099,
                            "name": "Identifier",
                            "src": "6696:6:14"
                          }
                        ],
                        "id": 2100,
                        "name": "FunctionCall",
                        "src": "6696:8:14"
                      }
                    ],
                    "id": 2101,
                    "name": "ExpressionStatement",
                    "src": "6696:8:14"
                  }
                ],
                "id": 2102,
                "name": "Block",
                "src": "6686:25:14"
              }
            ],
            "id": 2103,
            "name": "FunctionDefinition",
            "src": "6636:75:14"
          },
          {
            "attributes": {
              "functionSelector": "3f4ba83a",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "unpause",
              "scope": 2115,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2104,
                "name": "ParameterList",
                "src": "6733:2:14"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2109,
                "name": "ParameterList",
                "src": "6766:0:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 5337,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 2105,
                    "name": "Identifier",
                    "src": "6745:9:14"
                  }
                ],
                "id": 2106,
                "name": "ModifierInvocation",
                "src": "6745:9:14"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6222,
                      "type": "modifier ()",
                      "value": "whenPaused"
                    },
                    "id": 2107,
                    "name": "Identifier",
                    "src": "6755:10:14"
                  }
                ],
                "id": 2108,
                "name": "ModifierInvocation",
                "src": "6755:10:14"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6254,
                              "type": "function ()",
                              "value": "_unpause"
                            },
                            "id": 2110,
                            "name": "Identifier",
                            "src": "6776:8:14"
                          }
                        ],
                        "id": 2111,
                        "name": "FunctionCall",
                        "src": "6776:10:14"
                      }
                    ],
                    "id": 2112,
                    "name": "ExpressionStatement",
                    "src": "6776:10:14"
                  }
                ],
                "id": 2113,
                "name": "Block",
                "src": "6766:27:14"
              }
            ],
            "id": 2114,
            "name": "FunctionDefinition",
            "src": "6717:76:14"
          }
        ],
        "id": 2115,
        "name": "ContractDefinition",
        "src": "956:5839:14"
      }
    ],
    "id": 2116,
    "name": "SourceUnit",
    "src": "640:6156:14"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-02-01T23:13:33.208Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}