{
  "contractName": "TestInvokable",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "invokerAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "currentKTokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "currentTokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentTokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentExpectedBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentKTokenTotalReserve",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentOutstandingTokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isKTokenKEther",
          "type": "bool"
        }
      ],
      "name": "HelperDump",
      "type": "event"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "run",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "runRepayAmount",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "invokeAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "invokeData",
          "type": "bytes"
        }
      ],
      "name": "runInvoke",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invokerAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"currentKTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"currentTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentExpectedBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentKTokenTotalReserve\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentOutstandingTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isKTokenKEther\",\"type\":\"bool\"}],\"name\":\"HelperDump\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[],\"name\":\"run\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"invokeAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"invokeData\",\"type\":\"bytes\"}],\"name\":\"runInvoke\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"runRepayAmount\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/kbrizzle/code/kollateral/protocol/contracts/testing/TestInvokable.sol\":\"TestInvokable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/kbrizzle/code/kollateral/protocol/contracts/ExtendedMath.sol\":{\"keccak256\":\"0x9b4a67b1242134b64f557613259bfb51268d488cbc7b27cb2bc72c2f21f2b71f\",\"urls\":[\"bzz-raw://47bc3f04cddcbbe7a0373a074d50bbc1720ef7d73266532aab07474ea426ab43\",\"dweb:/ipfs/QmdPdivc8yXbmvDL1nG8xXHJF7qcfx6JqQoCFBv1ohDmdP\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/Invoker.sol\":{\"keccak256\":\"0xc6c6e31ef43758db90ef5f21ff27519ea736f40088abf4b635ac29ba658eb784\",\"urls\":[\"bzz-raw://50968c9a288e9c44d61a1912fc3a44c57fc6c07ab564be99e1b3395c89583b0d\",\"dweb:/ipfs/QmNeN8jTLcwx31J6vyxdgS2e5uyToZNstWWQ28xAK6kEAU\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/KToken.sol\":{\"keccak256\":\"0x748a3edca97018638a9ed18f3484977c124517f2261af8a7be3e1b8ee2fbe8a8\",\"urls\":[\"bzz-raw://9b5d42beda89cdf788e79cec733d96c4c4eaf896694948ee2c0fa5bb46d3972c\",\"dweb:/ipfs/Qmc9sGpHe3CTiEG9gzrdHtCgsuHBfAToTBGYmL8a4JL3J1\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/helpers/KollateralAuth.sol\":{\"keccak256\":\"0xb465f5099217ea79d85bbc3675401f66228e749c16d3192307866efd178e4375\",\"urls\":[\"bzz-raw://90c6a584e167acab4c64af7a8aacabb1fdb220e3e754f5fa3fb1d4f360c4f27f\",\"dweb:/ipfs/QmVjffhEDTXZVPpdRHUWfViiUwcADkKvEDZVChSS4XGSFB\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/helpers/KollateralInvokable.sol\":{\"keccak256\":\"0x653d1d930de94774c0e4ca7beb155db84656dc24ad94071bdb16a9b013c92f78\",\"urls\":[\"bzz-raw://6656eca4d9385d22725cac49012f7eb6042aa1519680affed0673858111b2af0\",\"dweb:/ipfs/QmfWENLFW34soWoHM2bT2BcD7ALcjsgtkcezGW9wu5rx1e\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/interfaces/IInvoker.sol\":{\"keccak256\":\"0x8ad397e0611b31884a19bed7b27712530efb95ecf032fc8b8e0c25f4d3190569\",\"urls\":[\"bzz-raw://b23aa7fa654935abb0286ceac8eaf281589b866b75f0cc5b2d8971e1378e98c1\",\"dweb:/ipfs/QmVqYaxBEQVGfXUXVSFXaG6ZfFz5dEwkjDoMprZqbLAnyN\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/interfaces/IKToken.sol\":{\"keccak256\":\"0x5b03d279a41856eef739da4ee50155425bbd95d99d80e4b910ec5abb91a99e40\",\"urls\":[\"bzz-raw://4ef7259b5604ef20e62b2503bc34d4052f99b85a18a80b072b8883bb7f9559de\",\"dweb:/ipfs/QmUsVQH9M3FoB4rpJGZJpZrbk2kcDFyRg5E5WfAKqHYkok\"]},\"/Users/kbrizzle/code/kollateral/protocol/contracts/testing/TestInvokable.sol\":{\"keccak256\":\"0x5b98fbf10d2fae628862f0afc7b54f069ddc724ead604b202ff41ef652d09641\",\"urls\":[\"bzz-raw://d388bb3665135fbcd6b3197cef4c5dcc962878a28eff13903983f1d60460bd09\",\"dweb:/ipfs/QmPVZesheq3as2yzgx8aFbFpbbjGk8grgaVVZoMppAuHrc\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x90a3995645af7562d84b9d69363ffa5ae7217714ab61e951bf7bc450f40e4061\",\"urls\":[\"bzz-raw://216ef9d6b614db4eb46970b4e84903f2534a45572dd30a79f0041f1a5830f436\",\"dweb:/ipfs/QmNPrJ4MWKUAWzKXpUqeyKRUfosaoANZAqXgvepdrCwZAG\"]},\"@openzeppelin/contracts/access/Roles.sol\":{\"keccak256\":\"0xb002c378d7b82a101bd659c341518953ca0919d342c0a400196982c0e7e7bcdb\",\"urls\":[\"bzz-raw://00a788c4631466c220b385bdd100c571d24b2deccd657615cfbcef6cadf669a4\",\"dweb:/ipfs/QmTEwDbjJNxmMNCDMqtuou3dyM8Wtp8Q9NFvn7SAVM7Jf3\"]},\"@openzeppelin/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0xd1b5c934bab36d753c22987ad98c7614cb50ebf641371a83c96f8138619d7c30\",\"urls\":[\"bzz-raw://69c4bb822caae3d1bfd38e81f03b6d618d4d83cbb8e9f8236d28e1c4fe1d0d81\",\"dweb:/ipfs/QmWamstbFhdySmocF2TSKYVLLZF24JG4aXMvHiRdWKv3RA\"]},\"@openzeppelin/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xd3e5a49edfb74654d122962cc60b917d1c60461e669a7262fd7aba201fac1260\",\"urls\":[\"bzz-raw://0307a3cae4df037aee16fb0b0d94849cb4d9b20d7d7182c185f3efac6d2caec0\",\"dweb:/ipfs/QmezTANBfrJmCvxfmfyfcfFGtbcUEUtoJCjfxKnAePiNoE\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0xecd8ab29d9a5771c3964d0cd1788c4a5098a0081b20fb275da850a22b1c59806\",\"urls\":[\"bzz-raw://696a75bc2c55407ce8251ccc7d19ecb1b7b2be1796a160a6524312babcc7e3d4\",\"dweb:/ipfs/QmQViKEp3y99h9uhRssE29TmjBKRnFMaoz3eJZ4eggggg2\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x65a4078c03875c25413a068ce9cfdd7e68a90f8786612d1189c89341e6e3b802\",\"urls\":[\"bzz-raw://45c0d95495b944fbb1aa09d900b0ab530903a432125ab8fddfa05064a7988991\",\"dweb:/ipfs/Qma2VeknkKA1THeubGzshWFk44BktXkXP1UKp9Un2uDSsu\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0x4a3a810b7ebe742e897e1fd428b3eeed2196d3acea58eaf9c566ed10d545d2ed\",\"urls\":[\"bzz-raw://28d03f328e19e4099d5013de0649afaeaabac1a614e130767ab1cb4aca9775b6\",\"dweb:/ipfs/Qmb9iW7yNuYehB2NfhRMs9TakqbLVQhBhmGMkaDZ5g1Eb4\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xe86fdc15fbc379ecf14d6aa4f51b87c0be8476e114e23c171b790a6717230655\",\"urls\":[\"bzz-raw://81905037f66d37ed211a4e3430af74f36e18b3a5d5b688e6d7d5ee199824a41a\",\"dweb:/ipfs/QmTcpgNKqLVRbcgNSUHazAbVf2bz5uh5mPkAijGeYW7Sqb\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50604051610deb380380610deb8339818101604052602081101561003357600080fd5b810190808051906020019092919050505080806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610d55806100966000396000f3fe6080604052600436106100345760003560e01c806370c8799a14610036578063c040622614610064578063fccad0f81461006e575b005b6100626004803603602081101561004c57600080fd5b8101908080359060200190929190505050610107565b005b61006c6101d6565b005b6101056004803603604081101561008457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100c157600080fd5b8201836020820111156100d357600080fd5b803590602001918460018302840111640100000000831117156100f557600080fd5b9091929391929390505050610397565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4b6f6c6c61746572616c417574683a206e6f7420696e766f6b6572000000000081525060200191505060405180910390fd5b6101d28161058c565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4b6f6c6c61746572616c417574683a206e6f7420696e766f6b6572000000000081525060200191505060405180910390fd5b7f421f526fb292d9b313d4d9c82a16ac5f3b02820d81d5d4b018b6d233b3090e936102c161083f565b6102c96108c7565b6102d161094f565b6102d96109d7565b6102e1610a5f565b6102e9610aee565b6102f1610b16565b604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018381526020018215151515815260200197505050505050505060405180910390a1610394610ba5565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4b6f6c6c61746572616c417574683a206e6f7420696e766f6b6572000000000081525060200191505060405180910390fd5b600060608473ffffffffffffffffffffffffffffffffffffffff1634858560405180838380828437808301925050509250505060006040518083038185875af1925050503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b509150915081819061057b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610540578082015181840152602081019050610525565b50505050905090810190601f16801561056d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610584610ba5565b505050505050565b6000610596610b16565b156106515760006105a561083f565b905082471015610600576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180610cc7602d913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610646573d6000803e3d6000fd5b50600191505061083a565b600061065b6108c7565b9050828173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156106db57600080fd5b505afa1580156106ef573d6000803e3d6000fd5b505050506040513d602081101561070557600080fd5b8101908080519060200190929190505050101561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180610cf4602d913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61079161083f565b856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156107fb57600080fd5b505af115801561080f573d6000803e3d6000fd5b505050506040513d602081101561082557600080fd5b81019080805190602001909291905050509150505b919050565b60003373ffffffffffffffffffffffffffffffffffffffff16639534eaea6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088757600080fd5b505afa15801561089b573d6000803e3d6000fd5b505050506040513d60208110156108b157600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff166311eefd5d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561090f57600080fd5b505afa158015610923573d6000803e3d6000fd5b505050506040513d602081101561093957600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff1663ff69ac366040518163ffffffff1660e01b815260040160206040518083038186803b15801561099757600080fd5b505afa1580156109ab573d6000803e3d6000fd5b505050506040513d60208110156109c157600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff16631e4ede1f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1f57600080fd5b505afa158015610a33573d6000803e3d6000fd5b505050506040513d6020811015610a4957600080fd5b8101908080519060200190929190505050905090565b6000610a6961083f565b73ffffffffffffffffffffffffffffffffffffffff16634c68df676040518163ffffffff1660e01b815260040160206040518083038186803b158015610aae57600080fd5b505afa158015610ac2573d6000803e3d6000fd5b505050506040513d6020811015610ad857600080fd5b8101908080519060200190929190505050905090565b6000610b11610afb610a5f565b610b036109d7565b610bbc90919063ffffffff16565b905090565b6000610b2061083f565b73ffffffffffffffffffffffffffffffffffffffff1663f10c96676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6557600080fd5b505afa158015610b79573d6000803e3d6000fd5b505050506040513d6020811015610b8f57600080fd5b8101908080519060200190929190505050905090565b6000610bb7610bb2610aee565b61058c565b905090565b6000610bfe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c06565b905092915050565b6000838311158290610cb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c78578082015181840152602081019050610c5d565b50505050905090810190601f168015610ca55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe4b6f6c6c61746572616c496e766f6b61626c653a206e6f7420656e6f7567682065746865722062616c616e63654b6f6c6c61746572616c496e766f6b61626c653a206e6f7420656e6f75676820746f6b656e2062616c616e6365a265627a7a72315820c97165d3df37ff3b75db52b93b14d712a78760ef393aee97ed1ef0c0b84edf3464736f6c63430005100032",
  "deployedBytecode": "0x6080604052600436106100345760003560e01c806370c8799a14610036578063c040622614610064578063fccad0f81461006e575b005b6100626004803603602081101561004c57600080fd5b8101908080359060200190929190505050610107565b005b61006c6101d6565b005b6101056004803603604081101561008457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100c157600080fd5b8201836020820111156100d357600080fd5b803590602001918460018302840111640100000000831117156100f557600080fd5b9091929391929390505050610397565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4b6f6c6c61746572616c417574683a206e6f7420696e766f6b6572000000000081525060200191505060405180910390fd5b6101d28161058c565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4b6f6c6c61746572616c417574683a206e6f7420696e766f6b6572000000000081525060200191505060405180910390fd5b7f421f526fb292d9b313d4d9c82a16ac5f3b02820d81d5d4b018b6d233b3090e936102c161083f565b6102c96108c7565b6102d161094f565b6102d96109d7565b6102e1610a5f565b6102e9610aee565b6102f1610b16565b604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018381526020018215151515815260200197505050505050505060405180910390a1610394610ba5565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4b6f6c6c61746572616c417574683a206e6f7420696e766f6b6572000000000081525060200191505060405180910390fd5b600060608473ffffffffffffffffffffffffffffffffffffffff1634858560405180838380828437808301925050509250505060006040518083038185875af1925050503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b509150915081819061057b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610540578082015181840152602081019050610525565b50505050905090810190601f16801561056d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610584610ba5565b505050505050565b6000610596610b16565b156106515760006105a561083f565b905082471015610600576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180610cc7602d913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610646573d6000803e3d6000fd5b50600191505061083a565b600061065b6108c7565b9050828173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156106db57600080fd5b505afa1580156106ef573d6000803e3d6000fd5b505050506040513d602081101561070557600080fd5b8101908080519060200190929190505050101561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180610cf4602d913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61079161083f565b856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156107fb57600080fd5b505af115801561080f573d6000803e3d6000fd5b505050506040513d602081101561082557600080fd5b81019080805190602001909291905050509150505b919050565b60003373ffffffffffffffffffffffffffffffffffffffff16639534eaea6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088757600080fd5b505afa15801561089b573d6000803e3d6000fd5b505050506040513d60208110156108b157600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff166311eefd5d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561090f57600080fd5b505afa158015610923573d6000803e3d6000fd5b505050506040513d602081101561093957600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff1663ff69ac366040518163ffffffff1660e01b815260040160206040518083038186803b15801561099757600080fd5b505afa1580156109ab573d6000803e3d6000fd5b505050506040513d60208110156109c157600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff16631e4ede1f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1f57600080fd5b505afa158015610a33573d6000803e3d6000fd5b505050506040513d6020811015610a4957600080fd5b8101908080519060200190929190505050905090565b6000610a6961083f565b73ffffffffffffffffffffffffffffffffffffffff16634c68df676040518163ffffffff1660e01b815260040160206040518083038186803b158015610aae57600080fd5b505afa158015610ac2573d6000803e3d6000fd5b505050506040513d6020811015610ad857600080fd5b8101908080519060200190929190505050905090565b6000610b11610afb610a5f565b610b036109d7565b610bbc90919063ffffffff16565b905090565b6000610b2061083f565b73ffffffffffffffffffffffffffffffffffffffff1663f10c96676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6557600080fd5b505afa158015610b79573d6000803e3d6000fd5b505050506040513d6020811015610b8f57600080fd5b8101908080519060200190929190505050905090565b6000610bb7610bb2610aee565b61058c565b905090565b6000610bfe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c06565b905092915050565b6000838311158290610cb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c78578082015181840152602081019050610c5d565b50505050905090810190601f168015610ca55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe4b6f6c6c61746572616c496e766f6b61626c653a206e6f7420656e6f7567682065746865722062616c616e63654b6f6c6c61746572616c496e766f6b61626c653a206e6f7420656e6f75676820746f6b656e2062616c616e6365a265627a7a72315820c97165d3df37ff3b75db52b93b14d712a78760ef393aee97ed1ef0c0b84edf3464736f6c63430005100032",
  "sourceMap": "111:1283:11:-;;;179:89;8:9:-1;5:2;;;30:1;27;20:12;5:2;179:89:11;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;179:89:11;;;;;;;;;;;;;;;;245:14;194::6;176:15;;:32;;;;;;;;;;;;;;;;;;120:95;179:89:11;111:1283;;;;;;",
  "deployedSourceMap": "111:1283:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1014:105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1014:105:11;;;;;;;;;;;;;;;;;:::i;:::-;;579:353;;;:::i;:::-;;1125:267;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1125:267:11;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1125:267:11;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1125:267:11;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1125:267:11;;;;;;;;;;;;:::i;:::-;;1014:105;276:15:6;;;;;;;;;;;262:29;;:10;:29;;;254:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1093:19:11;1105:6;1093:11;:19::i;:::-;;1014:105;:::o;579:353::-;276:15:6;;;;;;;;;;;262:29;;:10;:29;;;254:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;638:270:11;662:22;:20;:22::i;:::-;698:21;:19;:21::i;:::-;733:20;:18;:20::i;:::-;767:24;:22;:24::i;:::-;805:27;:25;:27::i;:::-;846:31;:29;:31::i;:::-;891:16;:14;:16::i;:::-;638:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;918:7;:5;:7::i;:::-;;579:353::o;1125:267::-;276:15:6;;;;;;;;;;;262:29;;:10;:29;;;254:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1234:12:11;1248:23;1275:13;:18;;1300:9;1311:10;;1275:47;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;1275:47:11;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1233:89:11;;;;1340:7;1356:10;1332:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1332:36:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1378:7;:5;:7::i;:::-;;333:1:6;;1125:267:11;;;:::o;1339:622:7:-;1394:4;1414:16;:14;:16::i;:::-;1410:545;;;1446:29;1494:22;:20;:22::i;:::-;1446:72;;1565:6;1540:21;:31;;1532:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:13;:22;;:30;1658:6;1635:30;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1635:30:7;1686:4;1679:11;;;;;1410:545;1721:12;1743:21;:19;:21::i;:::-;1721:44;;1821:6;1787:5;:15;;;1811:4;1787:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1787:30:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1787:30:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1787:30:7;;;;;;;;;;;;;;;;:40;;1779:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1898:5;:14;;;1913:22;:20;:22::i;:::-;1937:6;1898:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1898:46:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1898:46:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1898:46:7;;;;;;;;;;;;;;;;1891:53;;;1339:622;;;;:::o;252:130::-;307:7;341:10;333:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;333:42:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;333:42:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;333:42:7;;;;;;;;;;;;;;;;326:49;;252:130;:::o;388:128::-;442:7;476:10;468:39;;;:41;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;468:41:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;468:41:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;468:41:7;;;;;;;;;;;;;;;;461:48;;388:128;:::o;522:126::-;575:7;609:10;601:38;;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;601:40:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;601:40:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;601:40:7;;;;;;;;;;;;;;;;594:47;;522:126;:::o;654:134::-;711:7;745:10;737:42;;;:44;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;737:44:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;737:44:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;737:44:7;;;;;;;;;;;;;;;;730:51;;654:134;:::o;794:138::-;854:7;887:22;:20;:22::i;:::-;880:43;;;:45;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;880:45:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;880:45:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;880:45:7;;;;;;;;;;;;;;;;873:52;;794:138;:::o;938:154::-;1002:7;1028:57;1057:27;:25;:27::i;:::-;1028:24;:22;:24::i;:::-;:28;;:57;;;;:::i;:::-;1021:64;;938:154;:::o;1098:120::-;1147:4;1177:22;:20;:22::i;:::-;1170:39;;;:41;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1170:41:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1170:41:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1170:41:7;;;;;;;;;;;;;;;;1163:48;;1098:120;:::o;1224:109::-;1259:4;1282:44;1294:31;:29;:31::i;:::-;1282:11;:44::i;:::-;1275:51;;1224:109;:::o;1274:134:17:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1351:50;;1274:134;;;;:::o;1732:187::-;1818:7;1850:1;1845;:6;;1853:12;1837:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1837:29:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1876:9;1892:1;1888;:5;1876:17;;1911:1;1904:8;;;1732:187;;;;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"../helpers/KollateralInvokable.sol\";\nimport \"../helpers/KollateralAuth.sol\";\n\ncontract TestInvokable is KollateralInvokable, KollateralAuth {\n    constructor(address invokerAddress)\n    public\n    KollateralAuth(invokerAddress)\n    { }\n\n    event HelperDump(\n        address currentKTokenAddress, address currentTokenAddress, uint256 currentTokenAmount,\n        uint256 currentExpectedBalance, uint256 currentKTokenTotalReserve, uint256 currentOutstandingTokenAmount,\n        bool isKTokenKEther\n    );\n\n    function () external payable { }\n\n    function run() external payable onlyInvoker {\n        emit HelperDump(\n            currentKTokenAddress(),\n            currentTokenAddress(),\n            currentTokenAmount(),\n            currentExpectedBalance(),\n            currentKTokenTotalReserve(),\n            currentOutstandingTokenAmount(),\n            isKTokenKEther());\n        repay();\n    }\n\n    /* Custom methods for unit tests, designed to test for failure cases */\n    function runRepayAmount(uint256 amount) external payable onlyInvoker {\n        repayAmount(amount);\n    }\n\n    function runInvoke(address invokeAddress, bytes calldata invokeData) external payable onlyInvoker {\n        (bool success, bytes memory returndata) = invokeAddress.call.value(msg.value)(invokeData);\n        require(success, string(returndata));\n        repay();\n    }\n}\n",
  "sourcePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/testing/TestInvokable.sol",
  "ast": {
    "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/testing/TestInvokable.sol",
    "exportedSymbols": {
      "TestInvokable": [
        2373
      ]
    },
    "id": 2374,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2266,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/helpers/KollateralInvokable.sol",
        "file": "../helpers/KollateralInvokable.sol",
        "id": 2267,
        "nodeType": "ImportDirective",
        "scope": 2374,
        "sourceUnit": 1820,
        "src": "25:44:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/helpers/KollateralAuth.sol",
        "file": "../helpers/KollateralAuth.sol",
        "id": 2268,
        "nodeType": "ImportDirective",
        "scope": 2374,
        "sourceUnit": 1642,
        "src": "70:39:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2269,
              "name": "KollateralInvokable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1819,
              "src": "137:19:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KollateralInvokable_$1819",
                "typeString": "contract KollateralInvokable"
              }
            },
            "id": 2270,
            "nodeType": "InheritanceSpecifier",
            "src": "137:19:11"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2271,
              "name": "KollateralAuth",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1641,
              "src": "158:14:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KollateralAuth_$1641",
                "typeString": "contract KollateralAuth"
              }
            },
            "id": 2272,
            "nodeType": "InheritanceSpecifier",
            "src": "158:14:11"
          }
        ],
        "contractDependencies": [
          1641,
          1819
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2373,
        "linearizedBaseContracts": [
          2373,
          1641,
          1819
        ],
        "name": "TestInvokable",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2280,
              "nodeType": "Block",
              "src": "265:3:11",
              "statements": []
            },
            "documentation": null,
            "id": 2281,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2277,
                    "name": "invokerAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2274,
                    "src": "245:14:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 2278,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2276,
                  "name": "KollateralAuth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1641,
                  "src": "230:14:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_KollateralAuth_$1641_$",
                    "typeString": "type(contract KollateralAuth)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "230:30:11"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2275,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2274,
                  "name": "invokerAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2281,
                  "src": "191:22:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "191:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "190:24:11"
            },
            "returnParameters": {
              "id": 2279,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "265:0:11"
            },
            "scope": 2373,
            "src": "179:89:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2297,
            "name": "HelperDump",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2283,
                  "indexed": false,
                  "name": "currentKTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "300:28:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2282,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2285,
                  "indexed": false,
                  "name": "currentTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "330:27:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "330:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2287,
                  "indexed": false,
                  "name": "currentTokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "359:26:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "359:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2289,
                  "indexed": false,
                  "name": "currentExpectedBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "395:30:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "395:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2291,
                  "indexed": false,
                  "name": "currentKTokenTotalReserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "427:33:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "427:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2293,
                  "indexed": false,
                  "name": "currentOutstandingTokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "462:37:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2292,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "462:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2295,
                  "indexed": false,
                  "name": "isKTokenKEther",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "509:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2294,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "509:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "290:244:11"
            },
            "src": "274:261:11"
          },
          {
            "body": {
              "id": 2300,
              "nodeType": "Block",
              "src": "570:3:11",
              "statements": []
            },
            "documentation": null,
            "id": 2301,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2298,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "550:2:11"
            },
            "returnParameters": {
              "id": 2299,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "570:0:11"
            },
            "scope": 2373,
            "src": "541:32:11",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2326,
              "nodeType": "Block",
              "src": "623:309:11",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2307,
                          "name": "currentKTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1663,
                          "src": "662:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 2308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "662:22:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2309,
                          "name": "currentTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1676,
                          "src": "698:19:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 2310,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "698:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2311,
                          "name": "currentTokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1689,
                          "src": "733:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "733:20:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2313,
                          "name": "currentExpectedBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1702,
                          "src": "767:22:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "767:24:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2315,
                          "name": "currentKTokenTotalReserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1715,
                          "src": "805:25:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "805:27:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2317,
                          "name": "currentOutstandingTokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1728,
                          "src": "846:29:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "846:31:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2319,
                          "name": "isKTokenKEther",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1741,
                          "src": "891:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 2320,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "891:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2306,
                      "name": "HelperDump",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2297,
                      "src": "638:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256,bool)"
                      }
                    },
                    "id": 2321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "638:270:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2322,
                  "nodeType": "EmitStatement",
                  "src": "633:275:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2323,
                      "name": "repay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1752,
                      "src": "918:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_bool_$",
                        "typeString": "function () returns (bool)"
                      }
                    },
                    "id": 2324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "918:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2325,
                  "nodeType": "ExpressionStatement",
                  "src": "918:7:11"
                }
              ]
            },
            "documentation": null,
            "id": 2327,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2304,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2303,
                  "name": "onlyInvoker",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1640,
                  "src": "611:11:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "611:11:11"
              }
            ],
            "name": "run",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2302,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "591:2:11"
            },
            "returnParameters": {
              "id": 2305,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "623:0:11"
            },
            "scope": 2373,
            "src": "579:353:11",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2338,
              "nodeType": "Block",
              "src": "1083:36:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2335,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2329,
                        "src": "1105:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2334,
                      "name": "repayAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1818,
                      "src": "1093:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) returns (bool)"
                      }
                    },
                    "id": 2336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1093:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2337,
                  "nodeType": "ExpressionStatement",
                  "src": "1093:19:11"
                }
              ]
            },
            "documentation": null,
            "id": 2339,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2332,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2331,
                  "name": "onlyInvoker",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1640,
                  "src": "1071:11:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1071:11:11"
              }
            ],
            "name": "runRepayAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2329,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2339,
                  "src": "1038:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1038:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1037:16:11"
            },
            "returnParameters": {
              "id": 2333,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1083:0:11"
            },
            "scope": 2373,
            "src": "1014:105:11",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2371,
              "nodeType": "Block",
              "src": "1223:169:11",
              "statements": [
                {
                  "assignments": [
                    2349,
                    2351
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2349,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 2371,
                      "src": "1234:12:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2348,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1234:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2351,
                      "name": "returndata",
                      "nodeType": "VariableDeclaration",
                      "scope": 2371,
                      "src": "1248:23:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2350,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1248:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2360,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2358,
                        "name": "invokeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2343,
                        "src": "1311:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2355,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3596,
                            "src": "1300:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1300:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2352,
                            "name": "invokeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2341,
                            "src": "1275:13:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1275:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 2354,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1275:24:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
                          "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                        }
                      },
                      "id": 2357,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1275:35:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 2359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1275:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1233:89:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2362,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2349,
                        "src": "1340:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2364,
                            "name": "returndata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2351,
                            "src": "1356:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 2363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1349:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                            "typeString": "type(string storage pointer)"
                          },
                          "typeName": "string"
                        },
                        "id": 2365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1349:18:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2361,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "1332:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1332:36:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2367,
                  "nodeType": "ExpressionStatement",
                  "src": "1332:36:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2368,
                      "name": "repay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1752,
                      "src": "1378:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_bool_$",
                        "typeString": "function () returns (bool)"
                      }
                    },
                    "id": 2369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1378:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2370,
                  "nodeType": "ExpressionStatement",
                  "src": "1378:7:11"
                }
              ]
            },
            "documentation": null,
            "id": 2372,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2346,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2345,
                  "name": "onlyInvoker",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1640,
                  "src": "1211:11:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1211:11:11"
              }
            ],
            "name": "runInvoke",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2341,
                  "name": "invokeAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2372,
                  "src": "1144:21:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2340,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1144:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2343,
                  "name": "invokeData",
                  "nodeType": "VariableDeclaration",
                  "scope": 2372,
                  "src": "1167:25:11",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2342,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1167:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1143:50:11"
            },
            "returnParameters": {
              "id": 2347,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1223:0:11"
            },
            "scope": 2373,
            "src": "1125:267:11",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 2374,
        "src": "111:1283:11"
      }
    ],
    "src": "0:1395:11"
  },
  "legacyAST": {
    "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/testing/TestInvokable.sol",
    "exportedSymbols": {
      "TestInvokable": [
        2373
      ]
    },
    "id": 2374,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2266,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/helpers/KollateralInvokable.sol",
        "file": "../helpers/KollateralInvokable.sol",
        "id": 2267,
        "nodeType": "ImportDirective",
        "scope": 2374,
        "sourceUnit": 1820,
        "src": "25:44:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/kbrizzle/code/kollateral/protocol/contracts/helpers/KollateralAuth.sol",
        "file": "../helpers/KollateralAuth.sol",
        "id": 2268,
        "nodeType": "ImportDirective",
        "scope": 2374,
        "sourceUnit": 1642,
        "src": "70:39:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2269,
              "name": "KollateralInvokable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1819,
              "src": "137:19:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KollateralInvokable_$1819",
                "typeString": "contract KollateralInvokable"
              }
            },
            "id": 2270,
            "nodeType": "InheritanceSpecifier",
            "src": "137:19:11"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2271,
              "name": "KollateralAuth",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1641,
              "src": "158:14:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KollateralAuth_$1641",
                "typeString": "contract KollateralAuth"
              }
            },
            "id": 2272,
            "nodeType": "InheritanceSpecifier",
            "src": "158:14:11"
          }
        ],
        "contractDependencies": [
          1641,
          1819
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2373,
        "linearizedBaseContracts": [
          2373,
          1641,
          1819
        ],
        "name": "TestInvokable",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2280,
              "nodeType": "Block",
              "src": "265:3:11",
              "statements": []
            },
            "documentation": null,
            "id": 2281,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2277,
                    "name": "invokerAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2274,
                    "src": "245:14:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 2278,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2276,
                  "name": "KollateralAuth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1641,
                  "src": "230:14:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_KollateralAuth_$1641_$",
                    "typeString": "type(contract KollateralAuth)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "230:30:11"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2275,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2274,
                  "name": "invokerAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2281,
                  "src": "191:22:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "191:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "190:24:11"
            },
            "returnParameters": {
              "id": 2279,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "265:0:11"
            },
            "scope": 2373,
            "src": "179:89:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2297,
            "name": "HelperDump",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2283,
                  "indexed": false,
                  "name": "currentKTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "300:28:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2282,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2285,
                  "indexed": false,
                  "name": "currentTokenAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "330:27:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "330:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2287,
                  "indexed": false,
                  "name": "currentTokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "359:26:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "359:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2289,
                  "indexed": false,
                  "name": "currentExpectedBalance",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "395:30:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "395:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2291,
                  "indexed": false,
                  "name": "currentKTokenTotalReserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "427:33:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "427:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2293,
                  "indexed": false,
                  "name": "currentOutstandingTokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "462:37:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2292,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "462:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2295,
                  "indexed": false,
                  "name": "isKTokenKEther",
                  "nodeType": "VariableDeclaration",
                  "scope": 2297,
                  "src": "509:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2294,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "509:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "290:244:11"
            },
            "src": "274:261:11"
          },
          {
            "body": {
              "id": 2300,
              "nodeType": "Block",
              "src": "570:3:11",
              "statements": []
            },
            "documentation": null,
            "id": 2301,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2298,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "550:2:11"
            },
            "returnParameters": {
              "id": 2299,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "570:0:11"
            },
            "scope": 2373,
            "src": "541:32:11",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2326,
              "nodeType": "Block",
              "src": "623:309:11",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2307,
                          "name": "currentKTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1663,
                          "src": "662:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 2308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "662:22:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2309,
                          "name": "currentTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1676,
                          "src": "698:19:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 2310,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "698:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2311,
                          "name": "currentTokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1689,
                          "src": "733:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "733:20:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2313,
                          "name": "currentExpectedBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1702,
                          "src": "767:22:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "767:24:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2315,
                          "name": "currentKTokenTotalReserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1715,
                          "src": "805:25:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "805:27:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2317,
                          "name": "currentOutstandingTokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1728,
                          "src": "846:29:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 2318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "846:31:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2319,
                          "name": "isKTokenKEther",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1741,
                          "src": "891:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 2320,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "891:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2306,
                      "name": "HelperDump",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2297,
                      "src": "638:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256,bool)"
                      }
                    },
                    "id": 2321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "638:270:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2322,
                  "nodeType": "EmitStatement",
                  "src": "633:275:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2323,
                      "name": "repay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1752,
                      "src": "918:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_bool_$",
                        "typeString": "function () returns (bool)"
                      }
                    },
                    "id": 2324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "918:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2325,
                  "nodeType": "ExpressionStatement",
                  "src": "918:7:11"
                }
              ]
            },
            "documentation": null,
            "id": 2327,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2304,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2303,
                  "name": "onlyInvoker",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1640,
                  "src": "611:11:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "611:11:11"
              }
            ],
            "name": "run",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2302,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "591:2:11"
            },
            "returnParameters": {
              "id": 2305,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "623:0:11"
            },
            "scope": 2373,
            "src": "579:353:11",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2338,
              "nodeType": "Block",
              "src": "1083:36:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2335,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2329,
                        "src": "1105:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2334,
                      "name": "repayAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1818,
                      "src": "1093:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) returns (bool)"
                      }
                    },
                    "id": 2336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1093:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2337,
                  "nodeType": "ExpressionStatement",
                  "src": "1093:19:11"
                }
              ]
            },
            "documentation": null,
            "id": 2339,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2332,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2331,
                  "name": "onlyInvoker",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1640,
                  "src": "1071:11:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1071:11:11"
              }
            ],
            "name": "runRepayAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2329,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2339,
                  "src": "1038:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1038:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1037:16:11"
            },
            "returnParameters": {
              "id": 2333,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1083:0:11"
            },
            "scope": 2373,
            "src": "1014:105:11",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2371,
              "nodeType": "Block",
              "src": "1223:169:11",
              "statements": [
                {
                  "assignments": [
                    2349,
                    2351
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2349,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 2371,
                      "src": "1234:12:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2348,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1234:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2351,
                      "name": "returndata",
                      "nodeType": "VariableDeclaration",
                      "scope": 2371,
                      "src": "1248:23:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2350,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1248:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2360,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2358,
                        "name": "invokeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2343,
                        "src": "1311:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2355,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3596,
                            "src": "1300:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1300:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2352,
                            "name": "invokeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2341,
                            "src": "1275:13:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1275:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 2354,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1275:24:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
                          "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                        }
                      },
                      "id": 2357,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1275:35:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 2359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1275:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1233:89:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2362,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2349,
                        "src": "1340:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2364,
                            "name": "returndata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2351,
                            "src": "1356:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 2363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1349:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                            "typeString": "type(string storage pointer)"
                          },
                          "typeName": "string"
                        },
                        "id": 2365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1349:18:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2361,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3599,
                        3600
                      ],
                      "referencedDeclaration": 3600,
                      "src": "1332:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1332:36:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2367,
                  "nodeType": "ExpressionStatement",
                  "src": "1332:36:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2368,
                      "name": "repay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1752,
                      "src": "1378:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_bool_$",
                        "typeString": "function () returns (bool)"
                      }
                    },
                    "id": 2369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1378:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2370,
                  "nodeType": "ExpressionStatement",
                  "src": "1378:7:11"
                }
              ]
            },
            "documentation": null,
            "id": 2372,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2346,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2345,
                  "name": "onlyInvoker",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1640,
                  "src": "1211:11:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1211:11:11"
              }
            ],
            "name": "runInvoke",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2341,
                  "name": "invokeAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2372,
                  "src": "1144:21:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2340,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1144:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2343,
                  "name": "invokeData",
                  "nodeType": "VariableDeclaration",
                  "scope": 2372,
                  "src": "1167:25:11",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2342,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1167:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1143:50:11"
            },
            "returnParameters": {
              "id": 2347,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1223:0:11"
            },
            "scope": 2373,
            "src": "1125:267:11",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 2374,
        "src": "111:1283:11"
      }
    ],
    "src": "0:1395:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.20",
  "updatedAt": "2020-02-01T23:51:00.348Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}