{
  "contractName": "AdminImpl",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "LogAddMarket",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountMaxNumberOfMarketsWithBalances",
          "type": "uint256"
        }
      ],
      "name": "LogSetAccountMaxNumberOfMarketsWithBalances",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "accountOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IAccountRiskOverrideSetter",
          "name": "accountRiskOverrideSetter",
          "type": "address"
        }
      ],
      "name": "LogSetAccountRiskOverrideSetter",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "autoTrader",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isSpecial",
          "type": "bool"
        }
      ],
      "name": "LogSetAutoTraderIsSpecial",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "callbackGasLimit",
          "type": "uint256"
        }
      ],
      "name": "LogSetCallbackGasLimit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IAccountRiskOverrideSetter",
          "name": "defaultAccountRiskOverrideSetter",
          "type": "address"
        }
      ],
      "name": "LogSetDefaultAccountRiskOverrideSetter",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Decimal.D256",
          "name": "earningsRate",
          "type": "tuple"
        }
      ],
      "name": "LogSetEarningsRate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Decimal.D256",
          "name": "earningsRateOverride",
          "type": "tuple"
        }
      ],
      "name": "LogSetEarningsRateOverride",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "LogSetGlobalOperator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "interestSetter",
          "type": "address"
        }
      ],
      "name": "LogSetInterestSetter",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isClosing",
          "type": "bool"
        }
      ],
      "name": "LogSetIsClosing",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Decimal.D256",
          "name": "liquidationSpread",
          "type": "tuple"
        }
      ],
      "name": "LogSetLiquidationSpread",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Decimal.D256",
          "name": "liquidationSpreadPremium",
          "type": "tuple"
        }
      ],
      "name": "LogSetLiquidationSpreadPremium",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Decimal.D256",
          "name": "marginPremium",
          "type": "tuple"
        }
      ],
      "name": "LogSetMarginPremium",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Decimal.D256",
          "name": "marginRatio",
          "type": "tuple"
        }
      ],
      "name": "LogSetMarginRatio",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Types.Wei",
          "name": "maxBorrowWei",
          "type": "tuple"
        }
      ],
      "name": "LogSetMaxBorrowWei",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Types.Wei",
          "name": "maxSupplyWei",
          "type": "tuple"
        }
      ],
      "name": "LogSetMaxSupplyWei",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct Monetary.Value",
          "name": "minBorrowedValue",
          "type": "tuple"
        }
      ],
      "name": "LogSetMinBorrowedValue",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IOracleSentinel",
          "name": "oracleSentinel",
          "type": "address"
        }
      ],
      "name": "LogSetOracleSentinel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "priceOracle",
          "type": "address"
        }
      ],
      "name": "LogSetPriceOracle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LogWithdrawExcessTokens",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LogWithdrawUnsupportedTokens",
      "type": "event"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"LogAddMarket\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountMaxNumberOfMarketsWithBalances\",\"type\":\"uint256\"}],\"name\":\"LogSetAccountMaxNumberOfMarketsWithBalances\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IAccountRiskOverrideSetter\",\"name\":\"accountRiskOverrideSetter\",\"type\":\"address\"}],\"name\":\"LogSetAccountRiskOverrideSetter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"autoTrader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isSpecial\",\"type\":\"bool\"}],\"name\":\"LogSetAutoTraderIsSpecial\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callbackGasLimit\",\"type\":\"uint256\"}],\"name\":\"LogSetCallbackGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IAccountRiskOverrideSetter\",\"name\":\"defaultAccountRiskOverrideSetter\",\"type\":\"address\"}],\"name\":\"LogSetDefaultAccountRiskOverrideSetter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Decimal.D256\",\"name\":\"earningsRate\",\"type\":\"tuple\"}],\"name\":\"LogSetEarningsRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Decimal.D256\",\"name\":\"earningsRateOverride\",\"type\":\"tuple\"}],\"name\":\"LogSetEarningsRateOverride\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"LogSetGlobalOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"interestSetter\",\"type\":\"address\"}],\"name\":\"LogSetInterestSetter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isClosing\",\"type\":\"bool\"}],\"name\":\"LogSetIsClosing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Decimal.D256\",\"name\":\"liquidationSpread\",\"type\":\"tuple\"}],\"name\":\"LogSetLiquidationSpread\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Decimal.D256\",\"name\":\"liquidationSpreadPremium\",\"type\":\"tuple\"}],\"name\":\"LogSetLiquidationSpreadPremium\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Decimal.D256\",\"name\":\"marginPremium\",\"type\":\"tuple\"}],\"name\":\"LogSetMarginPremium\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Decimal.D256\",\"name\":\"marginRatio\",\"type\":\"tuple\"}],\"name\":\"LogSetMarginRatio\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Types.Wei\",\"name\":\"maxBorrowWei\",\"type\":\"tuple\"}],\"name\":\"LogSetMaxBorrowWei\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Types.Wei\",\"name\":\"maxSupplyWei\",\"type\":\"tuple\"}],\"name\":\"LogSetMaxSupplyWei\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Monetary.Value\",\"name\":\"minBorrowedValue\",\"type\":\"tuple\"}],\"name\":\"LogSetMinBorrowedValue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IOracleSentinel\",\"name\":\"oracleSentinel\",\"type\":\"address\"}],\"name\":\"LogSetOracleSentinel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"priceOracle\",\"type\":\"address\"}],\"name\":\"LogSetPriceOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LogWithdrawExcessTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LogWithdrawUnsupportedTokens\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"dYdX * Administrative functions to keep the protocol updated\",\"methods\":{},\"title\":\"AdminImpl\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/impl/AdminImpl.sol\":\"AdminImpl\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/impl/AdminImpl.sol\":{\"keccak256\":\"0xe0e67a0da08bac8f60cf3c800c1d462a7046ff6959ff9ba0399f3d754931f672\",\"urls\":[\"bzz-raw://0441193eb7bcb8610dc9044827272d51b5be3294c1bb3f61828e0abc18e4226f\",\"dweb:/ipfs/QmZzpg6mbxu1MZgPHKZnkFfJsFU6Cnk9LNJ5Nu8JaGTVie\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzz-raw://03335b7b07c7c8c8d613cfdd8ec39a0b5ec133ee510bf2fe6cc5a496767bef4b\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]}},\"version\":1}",
  "bytecode": "0x61344f610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061018c5760003560e01c806370b6151c116100e2578063b25328e011610096578063df7ff36311610070578063df7ff36314610409578063e80f802414610429578063f9cacc4c146104495761018c565b8063b25328e014610393578063bc54053f146103c9578063dd32998a146103e95761018c565b80638c5dabd1116100c75780638c5dabd114610333578063a289756d14610353578063aa92e348146103735761018c565b806370b6151c146102f35780637335079b146103135761018c565b80633c0c9ddc116101445780635cb90a6a1161011e5780635cb90a6a1461029357806369280845146102b35780636f481410146102d35761018c565b80633c0c9ddc146102335780633ea418831461025357806354dd3516146102735761018c565b806310c87b061161017557806310c87b06146101d35780631c90d824146101f3578063311401d0146102135761018c565b80630e7cd6f8146101915780630f44e6bc146101b3575b600080fd5b81801561019d57600080fd5b506101b16101ac366004612dc5565b610469565b005b8180156101bf57600080fd5b506101b16101ce366004612d95565b6104ac565b8180156101df57600080fd5b506101b16101ee366004612e27565b610578565b8180156101ff57600080fd5b506101b161020e366004612e8b565b610612565b81801561021f57600080fd5b506101b161022e366004612d95565b61062c565b81801561023f57600080fd5b506101b161024e366004612c06565b6106c1565b81801561025f57600080fd5b506101b161026e366004612ece565b610732565b81801561027f57600080fd5b506101b161028e366004612d95565b610747565b81801561029f57600080fd5b506101b16102ae366004612d65565b610807565b8180156102bf57600080fd5b506101b16102ce366004612e8b565b6109b2565b8180156102df57600080fd5b506101b16102ee366004612ece565b6109c7565b8180156102ff57600080fd5b506101b161030e366004612dc5565b6109dc565b81801561031f57600080fd5b506101b161032e366004612e8b565b610a89565b81801561033f57600080fd5b506101b161034e366004612e59565b610a9e565b81801561035f57600080fd5b506101b161036e366004612d65565b610ab3565b81801561037f57600080fd5b506101b161038e366004612e59565b610bfa565b81801561039f57600080fd5b506103b36103ae366004612df5565b610c0f565b6040516103c09190613259565b60405180910390f35b8180156103d557600080fd5b506101b16103e4366004612c8c565b610da5565b8180156103f557600080fd5b506103b3610404366004612bb9565b61102c565b81801561041557600080fd5b506101b1610424366004612c49565b611147565b81801561043557600080fd5b506101b1610444366004612c06565b6112a4565b81801561045557600080fd5b506101b1610464366004612d95565b611315565b600d82018190556040517f666be3717eee0b81b599a1d33d8714fbdea07c27044a5d8724df8479e41c8724906104a0908390613259565b60405180910390a15050565b601082015481516105029168010000000000000000900467ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f53707265616420746f6f2068696768000000000000000000000000000000000061139e565b6007820154815161054191116810591b5a5b925b5c1b60ba1b7f5370726561642063616e6e6f74206265203e3d20726174696f0000000000000061139e565b805160088301556040517f9f7e4a6848b17eb13974d54a526bd85f5762577a23c3095ea6fd888d429e834b906104a090839061323d565b610582838361144f565b60008281526001840160205260409081902080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000084151502179055517fec669433aa0b3212a238c30115dbf73736739faf98a33c293ecad3daad1b37f6906106059084908490613282565b60405180910390a1505050565b61061c838361144f565b6106278383836114c0565b505050565b6010820154815161068a91700100000000000000000000000000000000900467ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f5261746520746f6f20686967680000000000000000000000000000000000000061139e565b805160098301556040517fea691dd294c7882aadc1bebc2ffb81b91afb6be606dbf15d627c073889c72436906104a090839061323d565b806106cd5760026106d0565b60015b73ffffffffffffffffffffffffffffffffffffffff831660009081526006850160205260409081902060ff92909216909155517f3401777ccabf70a1ee50ed130d9a499a70dad2b7d7b33b6b63e7d11b3b18c117906106059084908490613185565b61073c838361144f565b610627838383611568565b601082015481516107919167ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f526174696f20746f6f206869676800000000000000000000000000000000000061139e565b600882015481516107d091106810591b5a5b925b5c1b60ba1b7f526174696f2063616e6e6f74206265203c3d207370726561640000000000000061139e565b805160078301556040517f253f176964e18a501db01a67272483db404e4e473e8afd1d255eeb0e96eb2e13906104a090839061323d565b6109408173ffffffffffffffffffffffffffffffffffffffff166349aa2e816040518163ffffffff1660e01b815260040160206040518083038186803b15801561085057600080fd5b505afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108889190810190612b3b565b801561090d57508173ffffffffffffffffffffffffffffffffffffffff16637a5d20ea6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108d557600080fd5b505afa1580156108e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061090d9190810190612b3b565b6810591b5a5b925b5c1b60ba1b7f496e76616c6964206f7261636c652073656e74696e656c00000000000000000061139e565b600c820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517f47f70af6683b1cc02ce51f4b6d58e630a95d6a1cd49adbc38d95b45903ba1d0b906104a09083906131fe565b6109bc838361144f565b610627838383611633565b6109d1838361144f565b6106278383836116c7565b610a1760028210156810591b5a5b925b5c1b60ba1b7f4d6178206e756d626572206f66206d61726b65747320746f6f206c6f7700000061139e565b610a5260408211156810591b5a5b925b5c1b60ba1b7f4d6178206e756d626572206f66206d61726b65747320746f6f2068696768000061139e565b600b82018190556040517f9323d71959fdcb6ea1803d945fddbd9a850de779731c80ea92444ccb7fe0e290906104a0908390613259565b610a93838361144f565b610627838383611784565b610aa8838361144f565b610627838383611834565b73ffffffffffffffffffffffffffffffffffffffff811615610b8857610ad7612a52565b610adf612a52565b8273ffffffffffffffffffffffffffffffffffffffff1663ca235420610b04336119aa565b6040518263ffffffff1660e01b8152600401610b20919061324b565b604080518083038186803b158015610b3757600080fd5b505afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b6f9190810190612b61565b9092509050610b8584838363ffffffff6119e316565b50505b600e820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517fa17ad87ab9de662755a5557000562d536be835860a491a5c6e48e1e529f73d94906104a09083906131fe565b610c04838361144f565b610627838383611b6e565b6000610c1b848461144f565b610c23612a65565b610c33858563ffffffff611cac16565b9050610c75610c4182611e09565b156810591b5a5b925b5c1b60ba1b7f4e6567617469766520657863657373000000000000000000000000000000000061139e565b6000610c87868663ffffffff611e2016565b905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cc49190613177565b60206040518083038186803b158015610cdc57600080fd5b505afa158015610cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d149190810190612f11565b90508083602001511115610d2a57602083018190525b6020830151610d589073ffffffffffffffffffffffffffffffffffffffff841690879063ffffffff611e4c16565b7fa5df3527e4451a18e4b8a5e3308e1d1f1962062aeafe061c48bbb29f172a39c8828460200151604051610d8d9291906131e3565b60405180910390a150506020015190505b9392505050565b610daf8a8a611f4b565b895460018082018c556000828152908c016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16179055610e0d611fc7565b600082815260018d016020908152604080832084516002808301805488870151988601517fffffffffffffffffffffffffffffffffffff00000000000000000000000000009091166dffffffffffffffffffffffffffff948516177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000009490991693909302979097177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff909316929092029190911790955580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000008815150217905573ffffffffffffffffffffffffffffffffffffffff8e168352928e019052819020829055517f8cf904fdff707692d4bd95366b93d7302a97b4bf64f6716fd00b046ecbf82a4690610f8a9083908d90613267565b60405180910390a18115610fd2577fec669433aa0b3212a238c30115dbf73736739faf98a33c293ecad3daad1b37f68183604051610fc9929190613282565b60405180910390a15b610fdd8b828b611834565b610fe88b828a611b6e565b610ff38b8289611784565b610ffe8b8288611633565b6110098b82876116c7565b6110148b8286611568565b61101f8b82856114c0565b5050505050505050505050565b60006110388484611f4b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8516906370a082319061108d903090600401613177565b60206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110dd9190810190612f11565b905061110673ffffffffffffffffffffffffffffffffffffffff8516848363ffffffff611e4c16565b7f9dcbc20ebd63f294c7a8332cf06b52eca32a867b9ea7ce29d6c1cc5901494bec84826040516111379291906131e3565b60405180910390a1949350505050565b73ffffffffffffffffffffffffffffffffffffffff81161561121c5761116b612a52565b611173612a52565b8273ffffffffffffffffffffffffffffffffffffffff1663ca235420611198866119aa565b6040518263ffffffff1660e01b81526004016111b4919061324b565b604080518083038186803b1580156111cb57600080fd5b505afa1580156111df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112039190810190612b61565b909250905061121985838363ffffffff6119e316565b50505b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600f850160205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001692841692909217909155517f1af51c8f58cc8040548649819c1c4d5a02c47e2cfa82d4efdbffa3e1a886dd179061060590849084906131a0565b806112b05760026112b3565b60015b73ffffffffffffffffffffffffffffffffffffffff831660009081526005850160205260409081902060ff92909216909155517feaeee7699e70e6b31ac89ec999ef6936b97ac1e364f0e1fcf584772372caa0d3906106059084908490613185565b60128201548151611367916fffffffffffffffffffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f56616c756520746f6f206869676800000000000000000000000000000000000061139e565b8051600a8301556040517ffdcde9342dcfa3a8817b7566b25fed913d2c6eddb65575d40e14681934fae971906104a090839061323d565b82610627576113ac82612002565b7f3a200000000000000000000000000000000000000000000000000000000000006113d683612002565b6040516020016113e8939291906130f1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526114469160040161320c565b60405180910390fd5b81546114bc90821080156114885750600082815260018401602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b6810591b5a5b925b5c1b60ba1b7f496e76616c6964206d61726b6574000000000000000000000000000000000000846120d6565b5050565b6010830154815161151e91700100000000000000000000000000000000900467ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f4561726e696e67732072617465206f7665727269646520746f6f20686967680061139e565b6000828152600184016020526040908190208251600b90910155517fff816cf82106b9313febc1fbe6ebc6dd757cf63ca19aaaaf330f16b50a51f3f4906106059084908490613290565b611570612a65565b604051806040016040528060001515815260200161158d8461216e565b6fffffffffffffffffffffffffffffffff169052600084815260018601602090815260409182902083516009820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905590830151600a90910155519091507fa13260938e0510d77a4bee42b7d845139f27dca9e2f0e5b04a1f2702e0d04f8a9061162590859084906132ab565b60405180910390a150505050565b6011830154815161167d9167ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f537072656164207072656d69756d20746f6f206869676800000000000000000061139e565b6000828152600184016020526040908190208251600690910155517f8fb842b3443e1b596f7e570c506ebadaec93ff38c1aece4f73c751e939d4c93c906106059084908490613290565b6116cf612a65565b60405180604001604052806001151581526020016116ec8461216e565b6fffffffffffffffffffffffffffffffff169052600084815260018601602090815260409182902083516007820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905590830151600890910155519091507ff70390002f3678ee6e309d1f70dbbb9d1ded23edb9488bc163ec57ecba50f1549061162590859084906132ab565b601083015481516117ea917801000000000000000000000000000000000000000000000000900467ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f4d617267696e207072656d69756d20746f6f206869676800000000000000000061139e565b6000828152600184016020526040908190208251600590910155517f19ecb621bc945075c47008c9deaf25107a3343ecfe752608915a9d1da35e9e7c906106059084908490613290565b6000828152600184016020526040908190205490517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169161192791908416906341976e09906118a1908590600401613177565b60206040518083038186803b1580156118b957600080fd5b505afa1580156118cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118f19190810190612b9b565b5115156810591b5a5b925b5c1b60ba1b7f496e76616c6964206f7261636c6520707269636500000000000000000000000061139e565b60008381526001850160205260409081902060030180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055517f6585928691672490b717a51fe425f4494b34c6b5cb8335c5dc1e70115bd26630906116259085908590613267565b6119b2612a65565b506040805180820190915273ffffffffffffffffffffffffffffffffffffffff82168152600060208201525b919050565b60108301548251611a419167ffffffffffffffff1610157f53746f72616765000000000000000000000000000000000000000000000000007f526174696f20746f6f206869676800000000000000000000000000000000000061139e565b60108301548151611aab9168010000000000000000900467ffffffffffffffff1610157f53746f72616765000000000000000000000000000000000000000000000000007f53707265616420746f6f2068696768000000000000000000000000000000000061139e565b815115801590611abb5750805115155b15611b155781518151611b1091117f53746f72616765000000000000000000000000000000000000000000000000007f5370726561642063616e6e6f74206265203e3d20726174696f0000000000000061139e565b610627565b805161062790158015611b2757508251155b7f53746f72616765000000000000000000000000000000000000000000000000007f53707265616420616e6420726174696f206d75737420626f746820626520300061139e565b60008281526001840160205260408082205490517fe8177dcf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216929184169163e8177dcf91611bd891859181906004016131bb565b60206040518083038186803b158015611bf057600080fd5b505afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c289190810190612b9b565b5060008381526001850160205260409081902060040180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055517faa2217332f2505521d63c728f59a8692c1c8c952a0c5d578e4142bb88cefb063906116259085908590613267565b611cb4612a65565b611cbc612a7c565b611ccc848463ffffffff6121d116565b9050611cd6612a65565b611ce6858563ffffffff61225d16565b90506000611cfa868663ffffffff611e2016565b9050611d04612a65565b6040805180820182526001815290517f70a08231000000000000000000000000000000000000000000000000000000008152602082019073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190611d67903090600401613177565b60206040518083038186803b158015611d7f57600080fd5b505afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611db79190810190612f11565b90529050611dc3612a65565b611dcb612a65565b611dd585876122bd565b9092509050611dfa82611dee858463ffffffff61236516565b9063ffffffff61236516565b96505050505050505b92915050565b8051600090158015611e0357505060200151151590565b6000908152600191909101602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b801580611e6e575073ffffffffffffffffffffffffffffffffffffffff821630145b15611e7857610627565b6040516106279084907fa9059cbb0000000000000000000000000000000000000000000000000000000090611eb390869086906024016131e3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601681526020017f546f6b656e3a207472616e73666572206661696c65640000000000000000000081525061237f565b73ffffffffffffffffffffffffffffffffffffffff8082166000818152600285016020908152604080832054808452600188019092529091205490921614611fc181156810591b5a5b925b5c1b60ba1b7f4d61726b6574206578697374730000000000000000000000000000000000000061139e565b50505050565b611fcf612a7c565b60408051606081018252670de0b6b3a76400008082526020820152908101611ff5612487565b63ffffffff169052905090565b6060808260405160200161201691906130d0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156120bf5781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061208257fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156120ba57600101815290506119de565b612049565b505060408051600081526020810190915292915050565b83611fc1576120e483612002565b7f3a2000000000000000000000000000000000000000000000000000000000000061210e84612002565b7f203c00000000000000000000000000000000000000000000000000000000000061213885612497565b6040516113e89594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001613119565b600081611e036fffffffffffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e7431323800000000000000000000846120d6565b6121d9612a7c565b506000908152600191909101602090815260409182902082516060810184526002909101546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416928201929092527c010000000000000000000000000000000000000000000000000000000090910463ffffffff169181019190915290565b612265612a65565b506000818152600180840160209081526040928390208351808501909452909101546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104169082015292915050565b6122c5612a65565b6122cd612a65565b6122d5612a65565b5060408051808201909152600181526020858101516fffffffffffffffffffffffffffffffff1690820152612308612a65565b50604080518082019091526000815285516fffffffffffffffffffffffffffffffff166020820152612338612a65565b61234283876125a6565b905061234c612a65565b61235683886125a6565b91989197509095505050505050565b61236d612a65565b610d9e8361237a8461265b565b612682565b600060608473ffffffffffffffffffffffffffffffffffffffff16846040516123a891906130e5565b6000604051808303816000865af19150503d80600081146123e5576040519150601f19603f3d011682016040523d82523d6000602084013e6123ea565b606091505b5091509150818390612429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b5080511561248057808060200190516124459190810190612b3b565b839061247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b505b5050505050565b600061249242612714565b905090565b6060816124d8575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526119de565b8160005b81156124f057600101600a820491506124dc565b6060816040519080825280601f01601f19166020018201604052801561251d576020820181803883390190505b508593509050815b801561259d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061256357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350612525565b50949350505050565b6125ae612a65565b602083015183516fffffffffffffffffffffffffffffffff909116901561261c576040805180820190915260018152602084810151908201906126119084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61276b16565b815250915050611e03565b6040805180820190915260008152835160208201906126119084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61276b16565b612663612a65565b5060408051808201909152815115815260208083015190820152919050565b61268a612a65565b612692612a65565b82518451151590151514156126c557835115158152602080850151908401516126bb9190612814565b6020820152610d9e565b82602001518460200151106126ee57835115158152602080850151908401516126bb9190612853565b825115158152602080840151908501516127089190612853565b60208201529392505050565b600081611e0363ffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e7433320000000000000000000000846120d6565b6000831580612778575082155b1561278f57612788600083612895565b9050610d9e565b60006127a1858563ffffffff6128d716565b905061280b6127d860016127cc60026127c0888463ffffffff61285316565b9063ffffffff61289516565b9063ffffffff61281416565b6127e8838663ffffffff61292b16565b10156127f55760006127f8565b60015b60ff166127cc838663ffffffff61289516565b95945050505050565b600082820183811015610d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114469061321d565b6000610d9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061296d565b6000610d9e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129b3565b6000826128e657506000611e03565b828202828482816128f357fe5b0414610d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114469061322d565b6000610d9e83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612a04565b600081848411156129ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b505050900390565b600081836129ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b5060008385816129fa57fe5b0495945050505050565b60008183612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b50828481612a4957fe5b06949350505050565b6040518060200160405280600081525090565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035611e03816133da565b8035611e03816133f1565b8051611e03816133f1565b8035611e03816133fa565b600060208284031215612ada57600080fd5b612ae460206132c6565b90506000612af28484612b25565b82525092915050565b600060208284031215612b0d57600080fd5b612b1760206132c6565b90506000612af28484612b30565b8035611e0381613403565b8051611e0381613403565b600060208284031215612b4d57600080fd5b6000612b598484612ab2565b949350505050565b60008060408385031215612b7457600080fd5b6000612b808585612afb565b9250506020612b9185828601612afb565b9150509250929050565b600060208284031215612bad57600080fd5b6000612b598484612afb565b600080600060608486031215612bce57600080fd5b6000612bda8686612b25565b9350506020612beb86828701612a9c565b9250506040612bfc86828701612a9c565b9150509250925092565b600080600060608486031215612c1b57600080fd5b6000612c278686612b25565b9350506020612c3886828701612a9c565b9250506040612bfc86828701612aa7565b600080600060608486031215612c5e57600080fd5b6000612c6a8686612b25565b9350506020612c7b86828701612a9c565b9250506040612bfc86828701612abd565b6000806000806000806000806000806101408b8d031215612cac57600080fd5b6000612cb88d8d612b25565b9a50506020612cc98d828e01612a9c565b9950506040612cda8d828e01612abd565b9850506060612ceb8d828e01612abd565b9750506080612cfc8d828e01612ac8565b96505060a0612d0d8d828e01612ac8565b95505060c0612d1e8d828e01612b25565b94505060e0612d2f8d828e01612b25565b935050610100612d418d828e01612ac8565b925050610120612d538d828e01612aa7565b9150509295989b9194979a5092959850565b60008060408385031215612d7857600080fd5b6000612d848585612b25565b9250506020612b9185828601612abd565b60008060408385031215612da857600080fd5b6000612db48585612b25565b9250506020612b9185828601612ac8565b60008060408385031215612dd857600080fd5b6000612de48585612b25565b9250506020612b9185828601612b25565b600080600060608486031215612e0a57600080fd5b6000612e168686612b25565b9350506020612beb86828701612b25565b600080600060608486031215612e3c57600080fd5b6000612e488686612b25565b9350506020612c3886828701612b25565b600080600060608486031215612e6e57600080fd5b6000612e7a8686612b25565b9350506020612c7b86828701612b25565b600080600060608486031215612ea057600080fd5b6000612eac8686612b25565b9350506020612ebd86828701612b25565b9250506040612bfc86828701612ac8565b600080600060608486031215612ee357600080fd5b6000612eef8686612b25565b9350506020612f0086828701612b25565b9250506040612bfc86828701612b25565b600060208284031215612f2357600080fd5b6000612b598484612b30565b612f38816132fa565b82525050565b612f3881613305565b612f38612f538261330a565b613354565b612f38612f538261332f565b612f38612f5382613354565b6000612f7b826132ed565b612f8581856119de565b9350612f95818560208601613386565b9290920192915050565b612f3881613357565b612f388161337b565b6000612fbc826132ed565b612fc681856132f1565b9350612fd6818560208601613386565b612fdf816133b2565b9093019392505050565b6000612ff6601b836132f1565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061302f6021836132f1565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b80516020830190611fc184826130c7565b805160408301906130a38482612f2f565b506020820151611fc160208501826130c7565b805160408301906130a38482612f3e565b612f3881613354565b60006130dc8284612f64565b50602001919050565b6000610d9e8284612f70565b60006130fd8286612f70565b91506131098285612f58565b60028201915061280b8284612f70565b60006131258289612f70565b91506131318288612f58565b6002820191506131418287612f70565b915061314d8286612f58565b60028201915061315d8285612f70565b91506131698284612f47565b506001019695505050505050565b60208101611e038284612f2f565b604081016131938285612f2f565b610d9e6020830184612f3e565b604081016131ae8285612f2f565b610d9e6020830184612f9f565b606081016131c98286612f2f565b6131d66020830185612fa8565b612b596040830184612fa8565b604081016131f18285612f2f565b610d9e60208301846130c7565b60208101611e038284612f9f565b60208082528101610d9e8184612fb1565b60208082528101611e0381612fe9565b60208082528101611e0381613022565b60208101611e038284613081565b60408101611e038284613092565b60208101611e0382846130c7565b6040810161327582856130c7565b610d9e6020830184612f2f565b6040810161319382856130c7565b6040810161329e82856130c7565b610d9e6020830184613081565b606081016132b982856130c7565b610d9e60208301846130b6565b60405181810167ffffffffffffffff811182821017156132e557600080fd5b604052919050565b5190565b90815260200190565b6000611e0382613362565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b6000611e03826132fa565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000611e0382613354565b60005b838110156133a1578181015183820152602001613389565b83811115611fc15750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b6133e3816132fa565b81146133ee57600080fd5b50565b6133e381613305565b6133e381613357565b6133e38161335456fea365627a7a723158204e0f9f11ffe6a90445da811145f00bf07903bb27393fb246bb0dc1a95de76c4c6c6578706572696d656e74616cf564736f6c63430005100040",
  "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061018c5760003560e01c806370b6151c116100e2578063b25328e011610096578063df7ff36311610070578063df7ff36314610409578063e80f802414610429578063f9cacc4c146104495761018c565b8063b25328e014610393578063bc54053f146103c9578063dd32998a146103e95761018c565b80638c5dabd1116100c75780638c5dabd114610333578063a289756d14610353578063aa92e348146103735761018c565b806370b6151c146102f35780637335079b146103135761018c565b80633c0c9ddc116101445780635cb90a6a1161011e5780635cb90a6a1461029357806369280845146102b35780636f481410146102d35761018c565b80633c0c9ddc146102335780633ea418831461025357806354dd3516146102735761018c565b806310c87b061161017557806310c87b06146101d35780631c90d824146101f3578063311401d0146102135761018c565b80630e7cd6f8146101915780630f44e6bc146101b3575b600080fd5b81801561019d57600080fd5b506101b16101ac366004612dc5565b610469565b005b8180156101bf57600080fd5b506101b16101ce366004612d95565b6104ac565b8180156101df57600080fd5b506101b16101ee366004612e27565b610578565b8180156101ff57600080fd5b506101b161020e366004612e8b565b610612565b81801561021f57600080fd5b506101b161022e366004612d95565b61062c565b81801561023f57600080fd5b506101b161024e366004612c06565b6106c1565b81801561025f57600080fd5b506101b161026e366004612ece565b610732565b81801561027f57600080fd5b506101b161028e366004612d95565b610747565b81801561029f57600080fd5b506101b16102ae366004612d65565b610807565b8180156102bf57600080fd5b506101b16102ce366004612e8b565b6109b2565b8180156102df57600080fd5b506101b16102ee366004612ece565b6109c7565b8180156102ff57600080fd5b506101b161030e366004612dc5565b6109dc565b81801561031f57600080fd5b506101b161032e366004612e8b565b610a89565b81801561033f57600080fd5b506101b161034e366004612e59565b610a9e565b81801561035f57600080fd5b506101b161036e366004612d65565b610ab3565b81801561037f57600080fd5b506101b161038e366004612e59565b610bfa565b81801561039f57600080fd5b506103b36103ae366004612df5565b610c0f565b6040516103c09190613259565b60405180910390f35b8180156103d557600080fd5b506101b16103e4366004612c8c565b610da5565b8180156103f557600080fd5b506103b3610404366004612bb9565b61102c565b81801561041557600080fd5b506101b1610424366004612c49565b611147565b81801561043557600080fd5b506101b1610444366004612c06565b6112a4565b81801561045557600080fd5b506101b1610464366004612d95565b611315565b600d82018190556040517f666be3717eee0b81b599a1d33d8714fbdea07c27044a5d8724df8479e41c8724906104a0908390613259565b60405180910390a15050565b601082015481516105029168010000000000000000900467ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f53707265616420746f6f2068696768000000000000000000000000000000000061139e565b6007820154815161054191116810591b5a5b925b5c1b60ba1b7f5370726561642063616e6e6f74206265203e3d20726174696f0000000000000061139e565b805160088301556040517f9f7e4a6848b17eb13974d54a526bd85f5762577a23c3095ea6fd888d429e834b906104a090839061323d565b610582838361144f565b60008281526001840160205260409081902080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000084151502179055517fec669433aa0b3212a238c30115dbf73736739faf98a33c293ecad3daad1b37f6906106059084908490613282565b60405180910390a1505050565b61061c838361144f565b6106278383836114c0565b505050565b6010820154815161068a91700100000000000000000000000000000000900467ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f5261746520746f6f20686967680000000000000000000000000000000000000061139e565b805160098301556040517fea691dd294c7882aadc1bebc2ffb81b91afb6be606dbf15d627c073889c72436906104a090839061323d565b806106cd5760026106d0565b60015b73ffffffffffffffffffffffffffffffffffffffff831660009081526006850160205260409081902060ff92909216909155517f3401777ccabf70a1ee50ed130d9a499a70dad2b7d7b33b6b63e7d11b3b18c117906106059084908490613185565b61073c838361144f565b610627838383611568565b601082015481516107919167ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f526174696f20746f6f206869676800000000000000000000000000000000000061139e565b600882015481516107d091106810591b5a5b925b5c1b60ba1b7f526174696f2063616e6e6f74206265203c3d207370726561640000000000000061139e565b805160078301556040517f253f176964e18a501db01a67272483db404e4e473e8afd1d255eeb0e96eb2e13906104a090839061323d565b6109408173ffffffffffffffffffffffffffffffffffffffff166349aa2e816040518163ffffffff1660e01b815260040160206040518083038186803b15801561085057600080fd5b505afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108889190810190612b3b565b801561090d57508173ffffffffffffffffffffffffffffffffffffffff16637a5d20ea6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108d557600080fd5b505afa1580156108e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061090d9190810190612b3b565b6810591b5a5b925b5c1b60ba1b7f496e76616c6964206f7261636c652073656e74696e656c00000000000000000061139e565b600c820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517f47f70af6683b1cc02ce51f4b6d58e630a95d6a1cd49adbc38d95b45903ba1d0b906104a09083906131fe565b6109bc838361144f565b610627838383611633565b6109d1838361144f565b6106278383836116c7565b610a1760028210156810591b5a5b925b5c1b60ba1b7f4d6178206e756d626572206f66206d61726b65747320746f6f206c6f7700000061139e565b610a5260408211156810591b5a5b925b5c1b60ba1b7f4d6178206e756d626572206f66206d61726b65747320746f6f2068696768000061139e565b600b82018190556040517f9323d71959fdcb6ea1803d945fddbd9a850de779731c80ea92444ccb7fe0e290906104a0908390613259565b610a93838361144f565b610627838383611784565b610aa8838361144f565b610627838383611834565b73ffffffffffffffffffffffffffffffffffffffff811615610b8857610ad7612a52565b610adf612a52565b8273ffffffffffffffffffffffffffffffffffffffff1663ca235420610b04336119aa565b6040518263ffffffff1660e01b8152600401610b20919061324b565b604080518083038186803b158015610b3757600080fd5b505afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b6f9190810190612b61565b9092509050610b8584838363ffffffff6119e316565b50505b600e820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517fa17ad87ab9de662755a5557000562d536be835860a491a5c6e48e1e529f73d94906104a09083906131fe565b610c04838361144f565b610627838383611b6e565b6000610c1b848461144f565b610c23612a65565b610c33858563ffffffff611cac16565b9050610c75610c4182611e09565b156810591b5a5b925b5c1b60ba1b7f4e6567617469766520657863657373000000000000000000000000000000000061139e565b6000610c87868663ffffffff611e2016565b905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cc49190613177565b60206040518083038186803b158015610cdc57600080fd5b505afa158015610cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d149190810190612f11565b90508083602001511115610d2a57602083018190525b6020830151610d589073ffffffffffffffffffffffffffffffffffffffff841690879063ffffffff611e4c16565b7fa5df3527e4451a18e4b8a5e3308e1d1f1962062aeafe061c48bbb29f172a39c8828460200151604051610d8d9291906131e3565b60405180910390a150506020015190505b9392505050565b610daf8a8a611f4b565b895460018082018c556000828152908c016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16179055610e0d611fc7565b600082815260018d016020908152604080832084516002808301805488870151988601517fffffffffffffffffffffffffffffffffffff00000000000000000000000000009091166dffffffffffffffffffffffffffff948516177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000009490991693909302979097177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff909316929092029190911790955580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000008815150217905573ffffffffffffffffffffffffffffffffffffffff8e168352928e019052819020829055517f8cf904fdff707692d4bd95366b93d7302a97b4bf64f6716fd00b046ecbf82a4690610f8a9083908d90613267565b60405180910390a18115610fd2577fec669433aa0b3212a238c30115dbf73736739faf98a33c293ecad3daad1b37f68183604051610fc9929190613282565b60405180910390a15b610fdd8b828b611834565b610fe88b828a611b6e565b610ff38b8289611784565b610ffe8b8288611633565b6110098b82876116c7565b6110148b8286611568565b61101f8b82856114c0565b5050505050505050505050565b60006110388484611f4b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8516906370a082319061108d903090600401613177565b60206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110dd9190810190612f11565b905061110673ffffffffffffffffffffffffffffffffffffffff8516848363ffffffff611e4c16565b7f9dcbc20ebd63f294c7a8332cf06b52eca32a867b9ea7ce29d6c1cc5901494bec84826040516111379291906131e3565b60405180910390a1949350505050565b73ffffffffffffffffffffffffffffffffffffffff81161561121c5761116b612a52565b611173612a52565b8273ffffffffffffffffffffffffffffffffffffffff1663ca235420611198866119aa565b6040518263ffffffff1660e01b81526004016111b4919061324b565b604080518083038186803b1580156111cb57600080fd5b505afa1580156111df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112039190810190612b61565b909250905061121985838363ffffffff6119e316565b50505b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600f850160205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001692841692909217909155517f1af51c8f58cc8040548649819c1c4d5a02c47e2cfa82d4efdbffa3e1a886dd179061060590849084906131a0565b806112b05760026112b3565b60015b73ffffffffffffffffffffffffffffffffffffffff831660009081526005850160205260409081902060ff92909216909155517feaeee7699e70e6b31ac89ec999ef6936b97ac1e364f0e1fcf584772372caa0d3906106059084908490613185565b60128201548151611367916fffffffffffffffffffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f56616c756520746f6f206869676800000000000000000000000000000000000061139e565b8051600a8301556040517ffdcde9342dcfa3a8817b7566b25fed913d2c6eddb65575d40e14681934fae971906104a090839061323d565b82610627576113ac82612002565b7f3a200000000000000000000000000000000000000000000000000000000000006113d683612002565b6040516020016113e8939291906130f1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526114469160040161320c565b60405180910390fd5b81546114bc90821080156114885750600082815260018401602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b6810591b5a5b925b5c1b60ba1b7f496e76616c6964206d61726b6574000000000000000000000000000000000000846120d6565b5050565b6010830154815161151e91700100000000000000000000000000000000900467ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f4561726e696e67732072617465206f7665727269646520746f6f20686967680061139e565b6000828152600184016020526040908190208251600b90910155517fff816cf82106b9313febc1fbe6ebc6dd757cf63ca19aaaaf330f16b50a51f3f4906106059084908490613290565b611570612a65565b604051806040016040528060001515815260200161158d8461216e565b6fffffffffffffffffffffffffffffffff169052600084815260018601602090815260409182902083516009820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905590830151600a90910155519091507fa13260938e0510d77a4bee42b7d845139f27dca9e2f0e5b04a1f2702e0d04f8a9061162590859084906132ab565b60405180910390a150505050565b6011830154815161167d9167ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f537072656164207072656d69756d20746f6f206869676800000000000000000061139e565b6000828152600184016020526040908190208251600690910155517f8fb842b3443e1b596f7e570c506ebadaec93ff38c1aece4f73c751e939d4c93c906106059084908490613290565b6116cf612a65565b60405180604001604052806001151581526020016116ec8461216e565b6fffffffffffffffffffffffffffffffff169052600084815260018601602090815260409182902083516007820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905590830151600890910155519091507ff70390002f3678ee6e309d1f70dbbb9d1ded23edb9488bc163ec57ecba50f1549061162590859084906132ab565b601083015481516117ea917801000000000000000000000000000000000000000000000000900467ffffffffffffffff1610156810591b5a5b925b5c1b60ba1b7f4d617267696e207072656d69756d20746f6f206869676800000000000000000061139e565b6000828152600184016020526040908190208251600590910155517f19ecb621bc945075c47008c9deaf25107a3343ecfe752608915a9d1da35e9e7c906106059084908490613290565b6000828152600184016020526040908190205490517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169161192791908416906341976e09906118a1908590600401613177565b60206040518083038186803b1580156118b957600080fd5b505afa1580156118cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118f19190810190612b9b565b5115156810591b5a5b925b5c1b60ba1b7f496e76616c6964206f7261636c6520707269636500000000000000000000000061139e565b60008381526001850160205260409081902060030180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055517f6585928691672490b717a51fe425f4494b34c6b5cb8335c5dc1e70115bd26630906116259085908590613267565b6119b2612a65565b506040805180820190915273ffffffffffffffffffffffffffffffffffffffff82168152600060208201525b919050565b60108301548251611a419167ffffffffffffffff1610157f53746f72616765000000000000000000000000000000000000000000000000007f526174696f20746f6f206869676800000000000000000000000000000000000061139e565b60108301548151611aab9168010000000000000000900467ffffffffffffffff1610157f53746f72616765000000000000000000000000000000000000000000000000007f53707265616420746f6f2068696768000000000000000000000000000000000061139e565b815115801590611abb5750805115155b15611b155781518151611b1091117f53746f72616765000000000000000000000000000000000000000000000000007f5370726561642063616e6e6f74206265203e3d20726174696f0000000000000061139e565b610627565b805161062790158015611b2757508251155b7f53746f72616765000000000000000000000000000000000000000000000000007f53707265616420616e6420726174696f206d75737420626f746820626520300061139e565b60008281526001840160205260408082205490517fe8177dcf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216929184169163e8177dcf91611bd891859181906004016131bb565b60206040518083038186803b158015611bf057600080fd5b505afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c289190810190612b9b565b5060008381526001850160205260409081902060040180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055517faa2217332f2505521d63c728f59a8692c1c8c952a0c5d578e4142bb88cefb063906116259085908590613267565b611cb4612a65565b611cbc612a7c565b611ccc848463ffffffff6121d116565b9050611cd6612a65565b611ce6858563ffffffff61225d16565b90506000611cfa868663ffffffff611e2016565b9050611d04612a65565b6040805180820182526001815290517f70a08231000000000000000000000000000000000000000000000000000000008152602082019073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190611d67903090600401613177565b60206040518083038186803b158015611d7f57600080fd5b505afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611db79190810190612f11565b90529050611dc3612a65565b611dcb612a65565b611dd585876122bd565b9092509050611dfa82611dee858463ffffffff61236516565b9063ffffffff61236516565b96505050505050505b92915050565b8051600090158015611e0357505060200151151590565b6000908152600191909101602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b801580611e6e575073ffffffffffffffffffffffffffffffffffffffff821630145b15611e7857610627565b6040516106279084907fa9059cbb0000000000000000000000000000000000000000000000000000000090611eb390869086906024016131e3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601681526020017f546f6b656e3a207472616e73666572206661696c65640000000000000000000081525061237f565b73ffffffffffffffffffffffffffffffffffffffff8082166000818152600285016020908152604080832054808452600188019092529091205490921614611fc181156810591b5a5b925b5c1b60ba1b7f4d61726b6574206578697374730000000000000000000000000000000000000061139e565b50505050565b611fcf612a7c565b60408051606081018252670de0b6b3a76400008082526020820152908101611ff5612487565b63ffffffff169052905090565b6060808260405160200161201691906130d0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156120bf5781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061208257fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156120ba57600101815290506119de565b612049565b505060408051600081526020810190915292915050565b83611fc1576120e483612002565b7f3a2000000000000000000000000000000000000000000000000000000000000061210e84612002565b7f203c00000000000000000000000000000000000000000000000000000000000061213885612497565b6040516113e89594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001613119565b600081611e036fffffffffffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e7431323800000000000000000000846120d6565b6121d9612a7c565b506000908152600191909101602090815260409182902082516060810184526002909101546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416928201929092527c010000000000000000000000000000000000000000000000000000000090910463ffffffff169181019190915290565b612265612a65565b506000818152600180840160209081526040928390208351808501909452909101546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104169082015292915050565b6122c5612a65565b6122cd612a65565b6122d5612a65565b5060408051808201909152600181526020858101516fffffffffffffffffffffffffffffffff1690820152612308612a65565b50604080518082019091526000815285516fffffffffffffffffffffffffffffffff166020820152612338612a65565b61234283876125a6565b905061234c612a65565b61235683886125a6565b91989197509095505050505050565b61236d612a65565b610d9e8361237a8461265b565b612682565b600060608473ffffffffffffffffffffffffffffffffffffffff16846040516123a891906130e5565b6000604051808303816000865af19150503d80600081146123e5576040519150601f19603f3d011682016040523d82523d6000602084013e6123ea565b606091505b5091509150818390612429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b5080511561248057808060200190516124459190810190612b3b565b839061247e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b505b5050505050565b600061249242612714565b905090565b6060816124d8575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526119de565b8160005b81156124f057600101600a820491506124dc565b6060816040519080825280601f01601f19166020018201604052801561251d576020820181803883390190505b508593509050815b801561259d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061256357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350612525565b50949350505050565b6125ae612a65565b602083015183516fffffffffffffffffffffffffffffffff909116901561261c576040805180820190915260018152602084810151908201906126119084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61276b16565b815250915050611e03565b6040805180820190915260008152835160208201906126119084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61276b16565b612663612a65565b5060408051808201909152815115815260208083015190820152919050565b61268a612a65565b612692612a65565b82518451151590151514156126c557835115158152602080850151908401516126bb9190612814565b6020820152610d9e565b82602001518460200151106126ee57835115158152602080850151908401516126bb9190612853565b825115158152602080840151908501516127089190612853565b60208201529392505050565b600081611e0363ffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e7433320000000000000000000000846120d6565b6000831580612778575082155b1561278f57612788600083612895565b9050610d9e565b60006127a1858563ffffffff6128d716565b905061280b6127d860016127cc60026127c0888463ffffffff61285316565b9063ffffffff61289516565b9063ffffffff61281416565b6127e8838663ffffffff61292b16565b10156127f55760006127f8565b60015b60ff166127cc838663ffffffff61289516565b95945050505050565b600082820183811015610d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114469061321d565b6000610d9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061296d565b6000610d9e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129b3565b6000826128e657506000611e03565b828202828482816128f357fe5b0414610d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114469061322d565b6000610d9e83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612a04565b600081848411156129ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b505050900390565b600081836129ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b5060008385816129fa57fe5b0495945050505050565b60008183612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446919061320c565b50828481612a4957fe5b06949350505050565b6040518060200160405280600081525090565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035611e03816133da565b8035611e03816133f1565b8051611e03816133f1565b8035611e03816133fa565b600060208284031215612ada57600080fd5b612ae460206132c6565b90506000612af28484612b25565b82525092915050565b600060208284031215612b0d57600080fd5b612b1760206132c6565b90506000612af28484612b30565b8035611e0381613403565b8051611e0381613403565b600060208284031215612b4d57600080fd5b6000612b598484612ab2565b949350505050565b60008060408385031215612b7457600080fd5b6000612b808585612afb565b9250506020612b9185828601612afb565b9150509250929050565b600060208284031215612bad57600080fd5b6000612b598484612afb565b600080600060608486031215612bce57600080fd5b6000612bda8686612b25565b9350506020612beb86828701612a9c565b9250506040612bfc86828701612a9c565b9150509250925092565b600080600060608486031215612c1b57600080fd5b6000612c278686612b25565b9350506020612c3886828701612a9c565b9250506040612bfc86828701612aa7565b600080600060608486031215612c5e57600080fd5b6000612c6a8686612b25565b9350506020612c7b86828701612a9c565b9250506040612bfc86828701612abd565b6000806000806000806000806000806101408b8d031215612cac57600080fd5b6000612cb88d8d612b25565b9a50506020612cc98d828e01612a9c565b9950506040612cda8d828e01612abd565b9850506060612ceb8d828e01612abd565b9750506080612cfc8d828e01612ac8565b96505060a0612d0d8d828e01612ac8565b95505060c0612d1e8d828e01612b25565b94505060e0612d2f8d828e01612b25565b935050610100612d418d828e01612ac8565b925050610120612d538d828e01612aa7565b9150509295989b9194979a5092959850565b60008060408385031215612d7857600080fd5b6000612d848585612b25565b9250506020612b9185828601612abd565b60008060408385031215612da857600080fd5b6000612db48585612b25565b9250506020612b9185828601612ac8565b60008060408385031215612dd857600080fd5b6000612de48585612b25565b9250506020612b9185828601612b25565b600080600060608486031215612e0a57600080fd5b6000612e168686612b25565b9350506020612beb86828701612b25565b600080600060608486031215612e3c57600080fd5b6000612e488686612b25565b9350506020612c3886828701612b25565b600080600060608486031215612e6e57600080fd5b6000612e7a8686612b25565b9350506020612c7b86828701612b25565b600080600060608486031215612ea057600080fd5b6000612eac8686612b25565b9350506020612ebd86828701612b25565b9250506040612bfc86828701612ac8565b600080600060608486031215612ee357600080fd5b6000612eef8686612b25565b9350506020612f0086828701612b25565b9250506040612bfc86828701612b25565b600060208284031215612f2357600080fd5b6000612b598484612b30565b612f38816132fa565b82525050565b612f3881613305565b612f38612f538261330a565b613354565b612f38612f538261332f565b612f38612f5382613354565b6000612f7b826132ed565b612f8581856119de565b9350612f95818560208601613386565b9290920192915050565b612f3881613357565b612f388161337b565b6000612fbc826132ed565b612fc681856132f1565b9350612fd6818560208601613386565b612fdf816133b2565b9093019392505050565b6000612ff6601b836132f1565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061302f6021836132f1565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b80516020830190611fc184826130c7565b805160408301906130a38482612f2f565b506020820151611fc160208501826130c7565b805160408301906130a38482612f3e565b612f3881613354565b60006130dc8284612f64565b50602001919050565b6000610d9e8284612f70565b60006130fd8286612f70565b91506131098285612f58565b60028201915061280b8284612f70565b60006131258289612f70565b91506131318288612f58565b6002820191506131418287612f70565b915061314d8286612f58565b60028201915061315d8285612f70565b91506131698284612f47565b506001019695505050505050565b60208101611e038284612f2f565b604081016131938285612f2f565b610d9e6020830184612f3e565b604081016131ae8285612f2f565b610d9e6020830184612f9f565b606081016131c98286612f2f565b6131d66020830185612fa8565b612b596040830184612fa8565b604081016131f18285612f2f565b610d9e60208301846130c7565b60208101611e038284612f9f565b60208082528101610d9e8184612fb1565b60208082528101611e0381612fe9565b60208082528101611e0381613022565b60208101611e038284613081565b60408101611e038284613092565b60208101611e0382846130c7565b6040810161327582856130c7565b610d9e6020830184612f2f565b6040810161319382856130c7565b6040810161329e82856130c7565b610d9e6020830184613081565b606081016132b982856130c7565b610d9e60208301846130b6565b60405181810167ffffffffffffffff811182821017156132e557600080fd5b604052919050565b5190565b90815260200190565b6000611e0382613362565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b6000611e03826132fa565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000611e0382613354565b60005b838110156133a1578181015183820152602001613389565b83811115611fc15750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b6133e3816132fa565b81146133ee57600080fd5b50565b6133e381613305565b6133e381613357565b6133e38161335456fea365627a7a723158204e0f9f11ffe6a90445da811145f00bf07903bb27393fb246bb0dc1a95de76c4c6c6578706572696d656e74616cf564736f6c63430005100040",
  "sourceMap": "1630:17400:68:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "1630:17400:68:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11978:603;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11978:603:68;;;;;;;;:::i;:::-;;9520:537;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9520:537:68;;;;;;;;:::i;6710:293::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6710:293:68;;;;;;;;:::i;8650:296::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8650:296:68;;;;;;;;:::i;10063:385::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10063:385:68;;;;;;;;:::i;14414:282::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14414:282:68;;;;;;;;:::i;8392:252::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8392:252:68;;;;;;;;:::i;9001:513::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9001:513:68;;;;;;;;:::i;11558:414::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11558:414:68;;;;;;;;:::i;7816:312::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7816:312:68;;;;;;;;:::i;8134:252::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8134:252:68;;;;;;;;:::i;10880:672::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10880:672:68;;;;;;;;:::i;7542:268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7542:268:68;;;;;;;;:::i;7009:253::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7009:253:68;;;;;;;;:::i;12587:740::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12587:740:68;;;;;;;;:::i;7268:268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7268:268:68;;;;;;;;:::i;4100:794::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4100:794:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5378:1326;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5378:1326:68;;;;;;;;:::i;4900:421::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4900:421:68;;;;;;;;:::i;13333:747::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13333:747:68;;;;;;;;:::i;14146:262::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14146:262:68;;;;;;;;:::i;10454:420::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10454:420:68;;;;;;;;:::i;11978:603::-;12467:33;;;:52;;;12534:40;;;;;;12503:16;;12534:40;;;;;;;;;;11978:603;;:::o;9520:537::-;9701:16;;;:37;9685:12;;9659:138;;9701:37;;;;;-1:-1:-1;9685:53:68;-1:-1:-1;;;9659:138:68;:12;:138::i;:::-;9848:16;;;:34;9833:12;;9807:144;;-1:-1:-1;;;;9807:144:68;:12;:144::i;:::-;9961:43;;:34;;;:43;10019:31;;;;;;9998:6;;10019:31;;6710:293;6855:34;6873:5;6880:8;6855:17;:34::i;:::-;6900:23;;;;:13;;;:23;;;;;;;:45;;;;;;;;;;;;6960:36;;;;;6900:23;;:45;;6960:36;;;;;;;;;;6710:293;;;:::o;8650:296::-;8832:34;8850:5;8857:8;8832:17;:34::i;:::-;8876:63;8901:5;8908:8;8918:20;8876:24;:63::i;:::-;8650:296;;;:::o;10063:385::-;10251:16;;;:32;10229:18;;10203:137;;10251:32;;;;;-1:-1:-1;10229:54:68;-1:-1:-1;;;10203:137:68;:12;:137::i;:::-;10350:44;;:29;;;:44;10409:32;;;;;;10382:12;;10409:32;;14414:282;14608:9;:17;;14624:1;14608:17;;;14620:1;14608:17;14569:36;;;;;;;:24;;;:36;;;;;;;:56;;;;;;;;14641:48;;;;;14594:10;;14679:9;;14641:48;;8392:252;8546:34;8564:5;8571:8;8546:17;:34::i;:::-;8590:47;8607:5;8614:8;8624:12;8590:16;:47::i;9001:513::-;9174:16;;;:31;9159:11;;9133:130;;9174:31;;-1:-1:-1;9159:46:68;-1:-1:-1;;;9133:130:68;:12;:130::i;:::-;9313:34;;;:40;9299:11;;9273:149;;-1:-1:-1;;;;9273:149:68;:12;:149::i;:::-;9432:36;;:16;;;:36;9483:24;;;;;;9463:5;;9483:24;;11558:414;11690:166;11716:14;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11716:32:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11716:32:68;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11716:32:68;;;;;;;;;:73;;;;;11752:14;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11752:37:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11752:37:68;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11752:37:68;;;;;;;;;-1:-1:-1;;;11690:166:68;:12;:166::i;:::-;11866:31;;;:48;;;;;;;;;;11929:36;;;;;;11866:48;;11929:36;;7816:312;8006:34;8024:5;8031:8;8006:17;:34::i;:::-;8050:71;8079:5;8086:8;8096:24;8050:28;:71::i;8134:252::-;8288:34;8306:5;8313:8;8288:17;:34::i;:::-;8332:47;8349:5;8356:8;8366:12;8332:16;:47::i;10880:672::-;11050:141;11117:1;11076:37;:42;;-1:-1:-1;;;11050:141:68;:12;:141::i;:::-;11201:143;11268:2;11227:37;:43;;-1:-1:-1;;;11201:143:68;:12;:143::i;:::-;11354:54;;;:94;;;11463:82;;;;;;11411:37;;11463:82;;7542:268;7710:34;7728:5;7735:8;7710:17;:34::i;:::-;7754:49;7772:5;7779:8;7789:13;7754:17;:49::i;7009:253::-;7166:34;7184:5;7191:8;7166:17;:34::i;:::-;7210:45;7226:5;7233:8;7243:11;7210:15;:45::i;12587:740::-;12764:55;;;;12760:379;;12853:31;;:::i;:::-;12902:37;;:::i;:::-;12956:32;:55;;;13012:30;13031:10;13012:18;:30::i;:::-;12956:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12956:87:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12956:87:68;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12956:87:68;;;;;;;;;12835:208;;-1:-1:-1;12835:208:68;-1:-1:-1;13057:71:68;:5;12835:208;;13057:71;:39;:71;:::i;:::-;12760:379;;;13149:49;;;:84;;;;;;;;;;13248:72;;;;;;13149:84;;13248:72;;7268:268;7434:34;7452:5;7459:8;7434:17;:34::i;:::-;7478:51;7497:5;7504:8;7514:14;7478:18;:51::i;4100:794::-;4255:7;4278:34;4296:5;4303:8;4278:17;:34::i;:::-;4322:26;;:::i;:::-;4351:34;:5;4376:8;4351:34;:24;:34;:::i;:::-;4322:63;;4396:108;4423:22;:9;:20;:22::i;:::-;4422:23;-1:-1:-1;;;4396:108:68;:12;:108::i;:::-;4515:13;4531:24;:5;4546:8;4531:24;:14;:24;:::i;:::-;4515:40;;4566:21;4605:5;4590:31;;;4630:4;4590:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4590:46:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4590:46:68;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;4590:46:68;;;;;;;;;4566:70;;4668:13;4650:9;:15;;;:31;4646:93;;;4697:15;;;:31;;;4646:93;4775:15;;;;4749:42;;:14;;;;4764:9;;4749:42;:14;:42;:::i;:::-;4807:47;4831:5;4838:9;:15;;;4807:47;;;;;;;;;;;;;;;;-1:-1:-1;;4872:15:68;;;;-1:-1:-1;4100:794:68;;;;;;:::o;5378:1326::-;5798:30;5815:5;5822;5798:16;:30::i;:::-;5858:16;;5904:1;5884:21;;;;;-1:-1:-1;5916:23:68;;;:13;;;:23;;;;;:37;;;;;;;;;;5995:19;:17;:19::i;:::-;5963:23;;;;:13;;;:23;;;;;;;;:51;;:29;;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6024:45;;;;;;;;;;;;6079:28;;;;;:21;;;:28;;;;;:39;;;6134:29;;;;;5963:23;;6079:28;;6134:29;;;;;;;;;;6177:9;6173:81;;;6207:36;6223:8;6233:9;6207:36;;;;;;;;;;;;;;;;6173:81;6264:45;6280:5;6287:8;6297:11;6264:15;:45::i;:::-;6319:51;6338:5;6345:8;6355:14;6319:18;:51::i;:::-;6380:49;6398:5;6405:8;6415:13;6380:17;:49::i;:::-;6439:71;6468:5;6475:8;6485:24;6439:28;:71::i;:::-;6520:47;6537:5;6544:8;6554:12;6520:16;:47::i;:::-;6577;6594:5;6601:8;6611:12;6577:16;:47::i;:::-;6634:63;6659:5;6666:8;6676:20;6634:24;:63::i;:::-;5378:1326;;;;;;;;;;;:::o;4900:421::-;5057:7;5080:30;5097:5;5104;5080:16;:30::i;:::-;5139:46;;;;;5121:15;;5139:31;;;;;;:46;;5179:4;;5139:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5139:46:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5139:46:68;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5139:46:68;;;;;;;;;5121:64;-1:-1:-1;5195:34:68;:14;;;5210:9;5121:64;5195:34;:14;:34;:::i;:::-;5245:44;5274:5;5281:7;5245:44;;;;;;;;;;;;;;;;5307:7;4900:421;-1:-1:-1;;;;4900:421:68:o;13333:747::-;13526:48;;;;13522:367;;13608:31;;:::i;:::-;13657:37;;:::i;:::-;13711:25;:48;;;13760:32;13779:12;13760:18;:32::i;:::-;13711:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13711:82:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13711:82:68;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13711:82:68;;;;;;;;;13590:203;;-1:-1:-1;13590:203:68;-1:-1:-1;13807:71:68;:5;13590:203;;13807:71;:39;:71;:::i;:::-;13522:367;;;13899:59;;;;;;;;:45;;;:59;;;;;;;:87;;;;;;;;;;;;;;14001:72;;;;;13899:59;;:87;;14001:72;;14146:262;14329:8;:16;;14344:1;14329:16;;;14340:1;14329:16;14295:31;;;;;;;:21;;;:31;;;;;;;:50;;;;;;;;14361:40;;;;;14317:8;;14392;;14361:40;;10454:420;10656:36;;;;10630:22;;10604:146;;10656:36;;-1:-1:-1;10630:62:68;-1:-1:-1;;;10604:146:68;:12;:146::i;:::-;10760:52;;:33;;;:52;10827:40;;;;;;10796:16;;10827:40;;1294:426:99;1428:4;1423:291;;1542:24;1561:4;1542:18;:24::i;:::-;1592:5;1623:26;1642:6;1623:18;:26::i;:::-;1500:171;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1500:171:99;;;;1448:255;;;;;;;;;;;;;;;;;18475:318:68;18643:16;;18606:180;;18632:27;;:74;;;;-1:-1:-1;18704:1:68;18663:23;;;:13;;;:23;;;;;:29;:43;:29;:43;;18632:74;-1:-1:-1;;;18606:180:68;18768:8;18606:12;:180::i;:::-;18475:318;;:::o;17492:501::-;17727:16;;;:32;17697:26;;17671:163;;17727:32;;;;;-1:-1:-1;17697:62:68;-1:-1:-1;;;17671:163:68;:12;:163::i;:::-;17845:23;;;;:13;;;:23;;;;;;;:67;;:44;;;;:67;17928:58;;;;;17859:8;;17892:20;;17928:58;;17121:365;17272:35;;:::i;:::-;17310:38;;;;;;;;17320:5;17310:38;;;;;;17327:20;:12;:18;:20::i;:::-;17310:38;;;;17358:23;;;;:13;;;:23;;;;;;;;;:57;;:36;;;:57;;;;;;;;;;;;;;;;;;;;;;17431:48;17358:57;;-1:-1:-1;17431:48:68;;;;17358:23;;:57;;17431:48;;;;;;;;;;17121:365;;;;:::o;16213:532::-;16460:44;;;;16426:30;;16400:171;;16460:44;;-1:-1:-1;16426:78:68;-1:-1:-1;;;16400:171:68;:12;:171::i;:::-;16581:23;;;;:13;;;:23;;;;;;;:75;;:48;;;;:75;16672:66;;;;;16595:8;;16632:24;;16672:66;;16751:364;16902:35;;:::i;:::-;16940:37;;;;;;;;16950:4;16940:37;;;;;;16956:20;:12;:18;:20::i;:::-;16940:37;;;;16987:23;;;;:13;;;:23;;;;;;;;;:57;;:36;;;:57;;;;;;;;;;;;;;;;;;;;;;17060:48;16987:57;;-1:-1:-1;17060:48:68;;;;16987:23;;:57;;17060:48;;15763:444;15977:16;;;:33;15954:19;;15928:149;;15977:33;;;;;-1:-1:-1;15954:56:68;-1:-1:-1;;;15928:149:68;:12;:149::i;:::-;16087:23;;;;:13;;;:23;;;;;;;:53;;:37;;;;:53;16156:44;;;;;16101:8;;16127:13;;16156:44;;14754:522;14960:13;14976:23;;;:13;;;:23;;;;;;;:29;15042:27;;;;;14976:29;;;;;15016:128;;15042:20;;;;;;:27;;14976:29;;15042:27;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15042:27:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15042:27:68;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15042:27:68;;;;;;;;;:33;:38;;-1:-1:-1;;;15016:128:68;:12;:128::i;:::-;15155:23;;;;:13;;;:23;;;;;;;:35;;:49;;;;;;;;;;15220;;;;;15155:23;;:49;;15220;;18799:229;18898:19;;:::i;:::-;-1:-1:-1;18940:81:68;;;;;;;;;;;;;;-1:-1:-1;18940:81:68;;;;18799:229;;;;:::o;26416:1031:101:-;26685:16;;;:31;26656:25;;26630:144;;26685:31;;-1:-1:-1;26656:60:101;26730:4;26630:144;:12;:144::i;:::-;26845:16;;;:37;26810:31;;26784:157;;26845:37;;;;;-1:-1:-1;26810:72:101;26896:4;26784:157;:12;:157::i;:::-;26956:25;;:30;;;;:70;;-1:-1:-1;26990:31:101;;:36;;26956:70;26952:489;;;27106:25;;27072:31;;27042:170;;-1:-1:-1;27149:4:101;27042:170;:12;:170::i;:::-;26952:489;;;27273:31;;27243:187;;27273:36;:70;;;;-1:-1:-1;27313:25:101;;:30;27273:70;27361:4;27243:187;:12;:187::i;15282:475:68:-;15515:13;15531:23;;;:13;;;:23;;;;;;:29;15570:43;;;;;15531:29;;;;;15570:30;;;;;;:43;;15531:29;;15515:13;;15570:43;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15570:43:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15570:43:68;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15570:43:68;;;;;;;;;-1:-1:-1;15624:23:68;;;;:13;;;:23;;;;;;;:38;;:55;;;;;;;;;;15695;;;;;15624:23;;:55;;15695;;10958:794:101;11102:16;;:::i;:::-;11134:27;;:::i;:::-;11164:24;:5;11179:8;11164:24;:14;:24;:::i;:::-;11134:54;;11198:30;;:::i;:::-;11231:27;:5;11249:8;11231:27;:17;:27;:::i;:::-;11198:60;-1:-1:-1;11269:13:101;11285:24;:5;11300:8;11285:24;:14;:24;:::i;:::-;11269:40;;11320:27;;:::i;:::-;11350:112;;;;;;;;11380:4;11350:112;;11405:46;;;;;11350:112;;;;11405:31;;;;;;:46;;11445:4;;11405:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11405:46:101;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11405:46:101;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11405:46:101;;;;;;;;;11350:112;;11320:142;-1:-1:-1;11487:26:101;;:::i;:::-;11527;;:::i;:::-;11566:39;11589:8;11599:5;11566:22;:39::i;:::-;11473:132;;-1:-1:-1;11473:132:101;-1:-1:-1;11705:40:101;11473:132;11705:25;:10;11473:132;11705:25;:14;:25;:::i;:::-;:29;:40;:29;:40;:::i;:::-;11698:47;;;;;;;;10958:794;;;;;:::o;5991:152:104:-;6114:6;;6086:4;;6113:7;:23;;;;-1:-1:-1;;6124:7:104;;;:12;;;5991:152::o;9848:200:101:-;9982:7;10012:23;;;:13;;;;;:23;;;;;:29;;;;9848:200::o;1074:385:103:-;1200:11;;;:34;;-1:-1:-1;1215:19:103;;;1229:4;1215:19;1200:34;1196:71;;;1250:7;;1196:71;1329:75;;1277:175;;1310:5;;1352:39;;1329:75;;1393:2;;1397:6;;1329:75;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1329:75:103;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;1329:75:103;1277:175;;;;;;;;;;;;;;;;;:19;:175::i;17999:470:68:-;18259:28;;;;18243:13;18259:28;;;:21;;;:28;;;;;;;;;18326:23;;;:13;;;:23;;;;;;:29;18259:28;;18326:29;18317:38;18366:96;18392:13;;-1:-1:-1;;;18366:96:68;:12;:96::i;:::-;17999:470;;;;:::o;3939:222:97:-;4006:12;;:::i;:::-;4041:113;;;;;;;;1250:6;4041:113;;;;;;;;;;4125:18;:16;:18::i;:::-;4041:113;;;;4034:120;-1:-1:-1;3939:222:97;:::o;6359:968:99:-;6463:12;6538:19;6577:5;6560:23;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;6560:23:99;;;;-1:-1:-1;49:4;6689:572:99;6710:6;;6689:572;;6962:9;;6864:3;;;;;6962:6;;6864:3;;6962:9;;;;;;;;;;;;:14;6958:293;;7017:1;7013:5;7143:22;;7150:6;-1:-1:-1;7223:13:99;;6958:293;6689:572;;;-1:-1:-1;;7308:12:99;;;7318:1;7308:12;;;;;;;;;7301:19;-1:-1:-1;;6359:968:99:o;1726:561::-;1886:4;1881:400;;2000:24;2019:4;2000:18;:24::i;:::-;2050:5;2081:26;2100:6;2081:18;:26::i;:::-;2133:6;2165:19;2175:8;2165:9;:19::i;:::-;1958:280;;;;;;;;;2210:6;;1958:280;;;;2811:315:92;2903:7;2951:6;2968:128;2994:16;;;;;3024:4;2968:128;2951:6;2968:12;:128::i;10738:214:101:-;10872:21;;:::i;:::-;-1:-1:-1;10916:23:101;;;;:13;;;;;:23;;;;;;;;;10909:36;;;;;;;10916:29;;;;10909:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10738:214::o;10054:220::-;10191:21;;:::i;:::-;-1:-1:-1;10235:23:101;;;;:13;;;;:23;;;;;;;;;10228:39;;;;;;;;10235:32;;;10228:39;;;;;;;;;;;;;;;;10054:220;;;;:::o;5583:601:97:-;5727:16;;:::i;:::-;5745;;:::i;:::-;5777:26;;:::i;:::-;-1:-1:-1;5806:81:97;;;;;;;;;5836:4;5806:81;;;5861:15;;;;5806:81;;;;;;5897:26;;:::i;:::-;-1:-1:-1;5926:82:97;;;;;;;;;-1:-1:-1;5926:82:97;;5982:15;;5926:82;;;;;;6018:26;;:::i;:::-;6047;6056:9;6067:5;6047:8;:26::i;:::-;6018:55;;6083:26;;:::i;:::-;6112;6121:9;6132:5;6112:8;:26::i;:::-;6156:9;;;;-1:-1:-1;5583:601:97;;-1:-1:-1;;;;;;5583:601:97:o;4677:169:104:-;4787:10;;:::i;:::-;4820:19;4824:1;4827:11;4836:1;4827:8;:11::i;:::-;4820:3;:19::i;2016:898:103:-;2669:12;2683:23;2710:5;:10;;2721:4;2710:16;;;;;;;;;;;;;;;;;;;;;;;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;;2668:58:103;;;;2744:7;2753:5;2736:23;;;;;;;;;;;;;;;;-1:-1:-1;2774:17:103;;:22;2770:138;;2870:10;2859:30;;;;;;;;;;;;;;2891:5;2851:46;;;;;;;;;;;;;;;;;2770:138;2016:898;;;;;:::o;938:146:102:-;1008:6;1037:40;1061:15;1037:23;:40::i;:::-;1030:47;;938:146;:::o;7333:913:99:-;7427:12;7459:10;7455:51;;-1:-1:-1;7485:10:99;;;;;;;;;;;;;;;;;;;7455:51;7567:5;7555:9;7606:69;7613:6;;7606:69;;7635:8;;7662:2;7657:7;;;;7606:69;;;7716:17;7746:6;7736:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;7736:17:99;87:34:-1;135:17;;-1:-1;7736:17:99;-1:-1:-1;7845:5:99;;-1:-1:-1;7716:37:99;-1:-1:-1;7877:6:99;7860:358;7885:6;;7860:358;;8039:3;;8135:2;8131:1;:6;902:2;8117:21;8106:34;;8096:4;8101:1;8096:7;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;8205:2:99;8200:7;;;;7860:358;;;-1:-1:-1;8235:4:99;7333:913;-1:-1:-1;;;;7333:913:99:o;4250:567:97:-;4381:16;;:::i;:::-;4442:11;;;;4468:10;;4434:20;;;;;4464:347;;;4501:130;;;;;;;;;4535:4;4501:130;;;4597:12;;;;4501:130;;;;4564:52;;:10;;:52;;1250:6;4564:52;:32;:52;:::i;:::-;4501:130;;;4494:137;;;;;4464:347;4669:131;;;;;;;;;-1:-1:-1;4669:131:97;;4766:12;;4669:131;;;;4733:52;;:10;;:52;;1250:6;4733:52;:32;:52;:::i;5782:203:104:-;5875:10;;:::i;:::-;-1:-1:-1;5908:70:104;;;;;;;;;5933:6;;5932:7;5908:70;;;5960:7;;;;5908:70;;;;5782:203;;;:::o;4852:610::-;4962:10;;:::i;:::-;4988:17;;:::i;:::-;5029:6;;5019;;:16;;;;;;5015:418;;;5065:6;;5051:20;;;;5113:7;;;;;5122;;;;5100:30;;5113:7;5100:12;:30::i;:::-;5085:12;;;:45;5015:418;;;5176:1;:7;;;5165:1;:7;;;:18;5161:262;;5217:6;;5203:20;;;;5269:7;;;;;5278;;;;5256:30;;5269:7;5256:12;:30::i;5161:262::-;5339:6;;5325:20;;;;5391:7;;;;;5400;;;;5378:30;;5391:7;5378:12;:30::i;:::-;5363:12;;;:45;5449:6;4852:610;-1:-1:-1;;;4852:610:104:o;3453:310:92:-;3544:6;3589;3606:127;3632:16;;;;;3662:4;3606:127;3589:6;3606:12;:127::i;2081:724::-;2245:7;2272:11;;;:29;;-1:-1:-1;2287:14:92;;2272:29;2268:151;;;2380:28;2393:1;2396:11;2380:12;:28::i;:::-;2373:35;;;;2268:151;2428:11;2442:21;:6;2453:9;2442:21;:10;:21;:::i;:::-;2428:35;-1:-1:-1;2702:96:92;2757:32;2787:1;2757:25;2780:1;2757:18;:11;2787:1;2757:18;:15;:18;:::i;:::-;:22;:25;:22;:25;:::i;:::-;:29;:32;:29;:32;:::i;:::-;2730:23;:6;2741:11;2730:23;:10;:23;:::i;:::-;:59;;:67;;2796:1;2730:67;;;2792:1;2730:67;2702:96;;:23;:6;2713:11;2702:23;:10;:23;:::i;:96::-;2695:103;2081:724;-1:-1:-1;;;;;2081:724:92:o;834:176:150:-;892:7;923:5;;;946:6;;;;938:46;;;;;;;;;;;;;1274:134;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;3073:130::-;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;2159:459::-;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:150;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;;;;;;;;;;4500:128;4558:7;4584:37;4588:1;4591;4584:37;;;;;;;;;;;;;;;;;:3;:37::i;1732:187::-;1818:7;1853:12;1845:6;;;;1837:29;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:150;;;1732:187::o;3718:338::-;3804:7;3904:12;3897:5;3889:28;;;;;;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;;3718:338;-1:-1:-1;;;;;3718:338:150:o;5132:163::-;5218:7;5253:12;5245:6;5237:29;;;;;;;;;;;;;;;;5287:1;5283;:5;;;;;;;5132:163;-1:-1:-1;;;;5132:163:150:o;1630:17400:68:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;1630:17400:68;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;1630:17400:68;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:124;206:20;;231:30;206:20;231:30;;273:128;348:13;;366:30;348:13;366:30;;408:202;511:20;;536:69;511:20;536:69;;1198:322;;1310:4;1298:9;1293:3;1289:19;1285:30;1282:2;;;1328:1;1325;1318:12;1282:2;1346:20;1361:4;1346:20;;;1337:29;-1:-1;1417:1;1449:49;1494:3;1474:9;1449:49;;;1424:75;;-1:-1;1435:5;1276:244;-1:-1;;1276:244;1553:344;;1676:4;1664:9;1659:3;1655:19;1651:30;1648:2;;;1694:1;1691;1684:12;1648:2;1712:20;1727:4;1712:20;;;1703:29;-1:-1;1783:1;1815:60;1871:3;1851:9;1815:60;;2662:180;2754:20;;2779:58;2754:20;2779:58;;3344:134;3422:13;;3440:33;3422:13;3440:33;;3485:257;;3597:2;3585:9;3576:7;3572:23;3568:32;3565:2;;;3613:1;3610;3603:12;3565:2;3648:1;3665:61;3718:7;3698:9;3665:61;;;3655:71;3559:183;-1:-1;;;;3559:183;3749:491;;;3927:2;3915:9;3906:7;3902:23;3898:32;3895:2;;;3943:1;3940;3933:12;3895:2;3978:1;3995:87;4074:7;4054:9;3995:87;;;3985:97;;3957:131;4119:2;4137:87;4216:7;4207:6;4196:9;4192:22;4137:87;;;4127:97;;4098:132;3889:351;;;;;;4247:311;;4386:2;4374:9;4365:7;4361:23;4357:32;4354:2;;;4402:1;4399;4392:12;4354:2;4437:1;4454:88;4534:7;4514:9;4454:88;;4881:541;;;;5044:2;5032:9;5023:7;5019:23;5015:32;5012:2;;;5060:1;5057;5050:12;5012:2;5095:1;5112:78;5182:7;5162:9;5112:78;;;5102:88;;5074:122;5227:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;;;5235:63;;5206:98;5335:2;5353:53;5398:7;5389:6;5378:9;5374:22;5353:53;;;5343:63;;5314:98;5006:416;;;;;;5429:535;;;;5589:2;5577:9;5568:7;5564:23;5560:32;5557:2;;;5605:1;5602;5595:12;5557:2;5640:1;5657:78;5727:7;5707:9;5657:78;;;5647:88;;5619:122;5772:2;5790:53;5835:7;5826:6;5815:9;5811:22;5790:53;;;5780:63;;5751:98;5880:2;5898:50;5940:7;5931:6;5920:9;5916:22;5898:50;;5971:613;;;;6170:2;6158:9;6149:7;6145:23;6141:32;6138:2;;;6186:1;6183;6176:12;6138:2;6221:1;6238:78;6308:7;6288:9;6238:78;;;6228:88;;6200:122;6353:2;6371:53;6416:7;6407:6;6396:9;6392:22;6371:53;;;6361:63;;6332:98;6461:2;6479:89;6560:7;6551:6;6540:9;6536:22;6479:89;;6591:1649;;;;;;;;;;;6986:3;6974:9;6965:7;6961:23;6957:33;6954:2;;;7003:1;7000;6993:12;6954:2;7038:1;7055:78;7125:7;7105:9;7055:78;;;7045:88;;7017:122;7170:2;7188:53;7233:7;7224:6;7213:9;7209:22;7188:53;;;7178:63;;7149:98;7278:2;7296:75;7363:7;7354:6;7343:9;7339:22;7296:75;;;7286:85;;7257:120;7408:2;7426:78;7496:7;7487:6;7476:9;7472:22;7426:78;;;7416:88;;7387:123;7541:3;7560:76;7628:7;7619:6;7608:9;7604:22;7560:76;;;7550:86;;7520:122;7673:3;7692:76;7760:7;7751:6;7740:9;7736:22;7692:76;;;7682:86;;7652:122;7805:3;7824:53;7869:7;7860:6;7849:9;7845:22;7824:53;;;7814:63;;7784:99;7914:3;7933:53;7978:7;7969:6;7958:9;7954:22;7933:53;;;7923:63;;7893:99;8023:3;8042:76;8110:7;8101:6;8090:9;8086:22;8042:76;;;8032:86;;8002:122;8155:3;8174:50;8216:7;8207:6;8196:9;8192:22;8174:50;;;8164:60;;8134:96;6948:1292;;;;;;;;;;;;;;8247:488;;;8429:2;8417:9;8408:7;8404:23;8400:32;8397:2;;;8445:1;8442;8435:12;8397:2;8480:1;8497:78;8567:7;8547:9;8497:78;;;8487:88;;8459:122;8612:2;8630:89;8711:7;8702:6;8691:9;8687:22;8630:89;;9215:462;;;9384:2;9372:9;9363:7;9359:23;9355:32;9352:2;;;9400:1;9397;9390:12;9352:2;9435:1;9452:78;9522:7;9502:9;9452:78;;;9442:88;;9414:122;9567:2;9585:76;9653:7;9644:6;9633:9;9629:22;9585:76;;10155:416;;;10301:2;10289:9;10280:7;10276:23;10272:32;10269:2;;;10317:1;10314;10307:12;10269:2;10352:1;10369:78;10439:7;10419:9;10369:78;;;10359:88;;10331:122;10484:2;10502:53;10547:7;10538:6;10527:9;10523:22;10502:53;;10578:541;;;;10741:2;10729:9;10720:7;10716:23;10712:32;10709:2;;;10757:1;10754;10747:12;10709:2;10792:1;10809:78;10879:7;10859:9;10809:78;;;10799:88;;10771:122;10924:2;10942:53;10987:7;10978:6;10967:9;10963:22;10942:53;;11126:535;;;;11286:2;11274:9;11265:7;11261:23;11257:32;11254:2;;;11302:1;11299;11292:12;11254:2;11337:1;11354:78;11424:7;11404:9;11354:78;;;11344:88;;11316:122;11469:2;11487:53;11532:7;11523:6;11512:9;11508:22;11487:53;;11668:591;;;;11856:2;11844:9;11835:7;11831:23;11827:32;11824:2;;;11872:1;11869;11862:12;11824:2;11907:1;11924:78;11994:7;11974:9;11924:78;;;11914:88;;11886:122;12039:2;12057:53;12102:7;12093:6;12082:9;12078:22;12057:53;;12858:587;;;;13044:2;13032:9;13023:7;13019:23;13015:32;13012:2;;;13060:1;13057;13050:12;13012:2;13095:1;13112:78;13182:7;13162:9;13112:78;;;13102:88;;13074:122;13227:2;13245:53;13290:7;13281:6;13270:9;13266:22;13245:53;;;13235:63;;13206:98;13335:2;13353:76;13421:7;13412:6;13401:9;13397:22;13353:76;;13452:541;;;;13615:2;13603:9;13594:7;13590:23;13586:32;13583:2;;;13631:1;13628;13621:12;13583:2;13666:1;13683:78;13753:7;13733:9;13683:78;;;13673:88;;13645:122;13798:2;13816:53;13861:7;13852:6;13841:9;13837:22;13816:53;;;13806:63;;13777:98;13906:2;13924:53;13969:7;13960:6;13949:9;13945:22;13924:53;;14000:263;;14115:2;14103:9;14094:7;14090:23;14086:32;14083:2;;;14131:1;14128;14121:12;14083:2;14166:1;14183:64;14239:7;14219:9;14183:64;;14270:103;14343:24;14361:5;14343:24;;;14338:3;14331:37;14325:48;;;14500:94;14567:21;14582:5;14567:21;;14712:148;14811:43;14830:23;14847:5;14830:23;;;14811:43;;14867:148;14966:43;14985:23;15002:5;14985:23;;15022:152;15123:45;15143:24;15161:5;15143:24;;15181:356;;15309:38;15341:5;15309:38;;;15359:88;15440:6;15435:3;15359:88;;;15352:95;;15452:52;15497:6;15492:3;15485:4;15478:5;15474:16;15452:52;;;15516:16;;;;;15289:248;-1:-1;;15289:248;15544:198;15663:73;15730:5;15663:73;;15932:142;16023:45;16062:5;16023:45;;16081:347;;16193:39;16226:5;16193:39;;;16244:71;16308:6;16303:3;16244:71;;;16237:78;;16320:52;16365:6;16360:3;16353:4;16346:5;16342:16;16320:52;;;16393:29;16415:6;16393:29;;;16384:39;;;;16173:255;-1:-1;;;16173:255;16436:327;;16596:67;16660:2;16655:3;16596:67;;;16696:29;16676:50;;16754:2;16745:12;;16582:181;-1:-1;;16582:181;16772:370;;16932:67;16996:2;16991:3;16932:67;;;17032:34;17012:55;;17101:3;17096:2;17087:12;;17080:25;17133:2;17124:12;;16918:224;-1:-1;;16918:224;17199:319;17405:23;;17338:4;17329:14;;;17434:63;17333:3;17405:23;17434:63;;17574:475;17780:23;;17713:4;17704:14;;;17809:63;17708:3;17780:23;17809:63;;;17733:145;17953:4;17946:5;17942:16;17936:23;17965:63;18022:4;18017:3;18013:14;17999:12;17965:63;;18480:465;18683:23;;18617:4;18608:14;;;18712:57;18612:3;18683:23;18712:57;;18952:103;19025:24;19043:5;19025:24;;19310:244;;19429:75;19500:3;19491:6;19429:75;;;-1:-1;19526:2;19517:12;;19417:137;-1:-1;19417:137;19561:262;;19705:93;19794:3;19785:6;19705:93;;19830:553;;20046:93;20135:3;20126:6;20046:93;;;20039:100;;20150:73;20219:3;20210:6;20150:73;;;20245:1;20240:3;20236:11;20229:18;;20265:93;20354:3;20345:6;20265:93;;20390:978;;20704:93;20793:3;20784:6;20704:93;;;20697:100;;20808:73;20877:3;20868:6;20808:73;;;20903:1;20898:3;20894:11;20887:18;;20923:93;21012:3;21003:6;20923:93;;;20916:100;;21027:73;21096:3;21087:6;21027:73;;;21122:1;21117:3;21113:11;21106:18;;21142:93;21231:3;21222:6;21142:93;;;21135:100;;21246:73;21315:3;21306:6;21246:73;;;-1:-1;21341:1;21332:11;;20685:683;-1:-1;;;;;;20685:683;21375:213;21493:2;21478:18;;21507:71;21482:9;21551:6;21507:71;;21595:312;21735:2;21720:18;;21749:71;21724:9;21793:6;21749:71;;;21831:66;21893:2;21882:9;21878:18;21869:6;21831:66;;21914:396;22096:2;22081:18;;22110:71;22085:9;22154:6;22110:71;;;22192:108;22296:2;22285:9;22281:18;22272:6;22192:108;;22317:467;22507:2;22492:18;;22521:71;22496:9;22565:6;22521:71;;;22603:80;22679:2;22668:9;22664:18;22655:6;22603:80;;;22694;22770:2;22759:9;22755:18;22746:6;22694:80;;22791:324;22937:2;22922:18;;22951:71;22926:9;22995:6;22951:71;;;23033:72;23101:2;23090:9;23086:18;23077:6;23033:72;;23122:285;23276:2;23261:18;;23290:107;23265:9;23370:6;23290:107;;23684:301;23822:2;23836:47;;;23807:18;;23897:78;23807:18;23961:6;23897:78;;23992:407;24183:2;24197:47;;;24168:18;;24258:131;24168:18;24258:131;;24406:407;24597:2;24611:47;;;24582:18;;24672:131;24582:18;24672:131;;24820:305;24984:2;24969:18;;24998:117;24973:9;25088:6;24998:117;;25132:305;25296:2;25281:18;;25310:117;25285:9;25400:6;25310:117;;25760:213;25878:2;25863:18;;25892:71;25867:9;25936:6;25892:71;;26216:324;26362:2;26347:18;;26376:71;26351:9;26420:6;26376:71;;;26458:72;26526:2;26515:9;26511:18;26502:6;26458:72;;26547:312;26687:2;26672:18;;26701:71;26676:9;26745:6;26701:71;;26866:416;27058:2;27043:18;;27072:71;27047:9;27116:6;27072:71;;;27154:118;27268:2;27257:9;27253:18;27244:6;27154:118;;27289:412;27479:2;27464:18;;27493:71;27468:9;27537:6;27493:71;;;27575:116;27687:2;27676:9;27672:18;27663:6;27575:116;;27708:256;27770:2;27764:9;27796:17;;;27871:18;27856:34;;27892:22;;;27853:62;27850:2;;;27928:1;27925;27918:12;27850:2;27944;27937:22;27748:216;;-1:-1;27748:216;27971:121;28058:12;;28029:63;28382:163;28485:19;;;28534:4;28525:14;;28478:67;28553:91;;28615:24;28633:5;28615:24;;28651:85;28717:13;28710:21;;28693:43;28743:144;28815:66;28804:78;;28787:100;28894:144;28966:66;28955:78;;28938:100;29045:72;29107:5;29090:27;29124:127;;29222:24;29240:5;29222:24;;29728:121;29801:42;29790:54;;29773:76;30604:116;;30691:24;30709:5;30691:24;;30728:268;30793:1;30800:101;30814:6;30811:1;30808:13;30800:101;;;30881:11;;;30875:18;30862:11;;;30855:39;30836:2;30829:10;30800:101;;;30916:6;30913:1;30910:13;30907:2;;;-1:-1;;30981:1;30963:16;;30956:27;30777:219;31245:97;31333:2;31313:14;31329:7;31309:28;;31293:49;31350:117;31419:24;31437:5;31419:24;;;31412:5;31409:35;31399:2;;31458:1;31455;31448:12;31399:2;31393:74;;31474:111;31540:21;31555:5;31540:21;;31592:189;31697:60;31751:5;31697:60;;32304:167;32398:49;32441:5;32398:49;",
  "source": "/*\n\n    Copyright 2019 dYdX Trading Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\npragma solidity ^0.5.7;\npragma experimental ABIEncoderV2;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { IERC20Detailed } from \"../interfaces/IERC20Detailed.sol\";\nimport { IAccountRiskOverrideSetter } from \"../interfaces/IAccountRiskOverrideSetter.sol\";\nimport { IInterestSetter } from \"../interfaces/IInterestSetter.sol\";\nimport { IOracleSentinel } from \"../interfaces/IOracleSentinel.sol\";\nimport { IPriceOracle } from \"../interfaces/IPriceOracle.sol\";\n\nimport { Account } from \"../lib/Account.sol\";\nimport { Decimal } from \"../lib/Decimal.sol\";\nimport { Interest } from \"../lib/Interest.sol\";\nimport { DolomiteMarginMath } from \"../lib/DolomiteMarginMath.sol\";\nimport { Monetary } from \"../lib/Monetary.sol\";\nimport { Require } from \"../lib/Require.sol\";\nimport { Storage } from \"../lib/Storage.sol\";\nimport { Token } from \"../lib/Token.sol\";\nimport { Types } from \"../lib/Types.sol\";\n\n\n/**\n * @title AdminImpl\n * @author dYdX\n *\n * Administrative functions to keep the protocol updated\n */\nlibrary AdminImpl {\n    using Address for address;\n    using DolomiteMarginMath for uint256;\n    using Storage for Storage.State;\n    using Token for address;\n    using Types for Types.Wei;\n\n    // ============ Constants ============\n\n    bytes32 private constant FILE = \"AdminImpl\";\n\n    // ============ Events ============\n\n    event LogWithdrawExcessTokens(\n        address token,\n        uint256 amount\n    );\n\n    event LogWithdrawUnsupportedTokens(\n        address token,\n        uint256 amount\n    );\n\n    event LogAddMarket(\n        uint256 marketId,\n        address token\n    );\n\n    event LogSetIsClosing(\n        uint256 marketId,\n        bool isClosing\n    );\n\n    event LogSetPriceOracle(\n        uint256 marketId,\n        address priceOracle\n    );\n\n    event LogSetInterestSetter(\n        uint256 marketId,\n        address interestSetter\n    );\n\n    event LogSetMarginPremium(\n        uint256 marketId,\n        Decimal.D256 marginPremium\n    );\n\n    event LogSetLiquidationSpreadPremium(\n        uint256 marketId,\n        Decimal.D256 liquidationSpreadPremium\n    );\n\n    event LogSetMaxSupplyWei(\n        uint256 marketId,\n        Types.Wei maxSupplyWei\n    );\n\n    event LogSetMaxBorrowWei(\n        uint256 marketId,\n        Types.Wei maxBorrowWei\n    );\n\n    event LogSetEarningsRateOverride(\n        uint256 marketId,\n        Decimal.D256 earningsRateOverride\n    );\n\n    event LogSetMarginRatio(\n        Decimal.D256 marginRatio\n    );\n\n    event LogSetLiquidationSpread(\n        Decimal.D256 liquidationSpread\n    );\n\n    event LogSetEarningsRate(\n        Decimal.D256 earningsRate\n    );\n\n    event LogSetMinBorrowedValue(\n        Monetary.Value minBorrowedValue\n    );\n\n    event LogSetAccountMaxNumberOfMarketsWithBalances(\n        uint256 accountMaxNumberOfMarketsWithBalances\n    );\n\n    event LogSetOracleSentinel(\n        IOracleSentinel oracleSentinel\n    );\n\n    event LogSetCallbackGasLimit(\n        uint256 callbackGasLimit\n    );\n\n    event LogSetDefaultAccountRiskOverrideSetter(\n        IAccountRiskOverrideSetter defaultAccountRiskOverrideSetter\n    );\n\n    event LogSetAccountRiskOverrideSetter(\n        address accountOwner,\n        IAccountRiskOverrideSetter accountRiskOverrideSetter\n    );\n\n    event LogSetGlobalOperator(\n        address operator,\n        bool approved\n    );\n\n    event LogSetAutoTraderIsSpecial(\n        address autoTrader,\n        bool isSpecial\n    );\n\n    // ============ Token Functions ============\n\n    function ownerWithdrawExcessTokens(\n        Storage.State storage state,\n        uint256 marketId,\n        address recipient\n    )\n    public\n    returns (uint256)\n    {\n        _validateMarketId(state, marketId);\n        Types.Wei memory excessWei = state.getNumExcessTokens(marketId);\n\n        Require.that(\n            !excessWei.isNegative(),\n            FILE,\n            \"Negative excess\"\n        );\n\n        address token = state.getToken(marketId);\n\n        uint256 actualBalance = IERC20Detailed(token).balanceOf(address(this));\n        if (excessWei.value > actualBalance) {\n            excessWei.value = actualBalance;\n        }\n\n        token.transfer(recipient, excessWei.value);\n\n        emit LogWithdrawExcessTokens(token, excessWei.value);\n\n        return excessWei.value;\n    }\n\n    function ownerWithdrawUnsupportedTokens(\n        Storage.State storage state,\n        address token,\n        address recipient\n    )\n    public\n    returns (uint256)\n    {\n        _requireNoMarket(state, token);\n\n        uint256 balance = IERC20Detailed(token).balanceOf(address(this));\n        token.transfer(recipient, balance);\n\n        emit LogWithdrawUnsupportedTokens(token, balance);\n\n        return balance;\n    }\n\n    // ============ Market Functions ============\n\n    function ownerAddMarket(\n        Storage.State storage state,\n        address token,\n        IPriceOracle priceOracle,\n        IInterestSetter interestSetter,\n        Decimal.D256 memory marginPremium,\n        Decimal.D256 memory liquidationSpreadPremium,\n        uint256 maxSupplyWei,\n        uint256 maxBorrowWei,\n        Decimal.D256 memory earningsRateOverride,\n        bool isClosing\n    )\n    public\n    {\n        _requireNoMarket(state, token);\n\n        uint256 marketId = state.numMarkets;\n        state.numMarkets += 1;\n\n        state.markets[marketId].token = token;\n        state.markets[marketId].index = Interest.newIndex();\n        state.markets[marketId].isClosing = isClosing;\n        state.tokenToMarketId[token] = marketId;\n\n        emit LogAddMarket(marketId, token);\n        if (isClosing) {\n            emit LogSetIsClosing(marketId, isClosing);\n        }\n\n        _setPriceOracle(state, marketId, priceOracle);\n        _setInterestSetter(state, marketId, interestSetter);\n        _setMarginPremium(state, marketId, marginPremium);\n        _setLiquidationSpreadPremium(state, marketId, liquidationSpreadPremium);\n        _setMaxSupplyWei(state, marketId, maxSupplyWei);\n        _setMaxBorrowWei(state, marketId, maxBorrowWei);\n        _setEarningsRateOverride(state, marketId, earningsRateOverride);\n    }\n\n    function ownerSetIsClosing(\n        Storage.State storage state,\n        uint256 marketId,\n        bool isClosing\n    )\n    public\n    {\n        _validateMarketId(state, marketId);\n\n        state.markets[marketId].isClosing = isClosing;\n        emit LogSetIsClosing(marketId, isClosing);\n    }\n\n    function ownerSetPriceOracle(\n        Storage.State storage state,\n        uint256 marketId,\n        IPriceOracle priceOracle\n    )\n    public\n    {\n        _validateMarketId(state, marketId);\n        _setPriceOracle(state, marketId, priceOracle);\n    }\n\n    function ownerSetInterestSetter(\n        Storage.State storage state,\n        uint256 marketId,\n        IInterestSetter interestSetter\n    )\n    public\n    {\n        _validateMarketId(state, marketId);\n        _setInterestSetter(state, marketId, interestSetter);\n    }\n\n    function ownerSetMarginPremium(\n        Storage.State storage state,\n        uint256 marketId,\n        Decimal.D256 memory marginPremium\n    )\n    public\n    {\n        _validateMarketId(state, marketId);\n        _setMarginPremium(state, marketId, marginPremium);\n    }\n\n    function ownerSetLiquidationSpreadPremium(\n        Storage.State storage state,\n        uint256 marketId,\n        Decimal.D256 memory liquidationSpreadPremium\n    )\n    public\n    {\n        _validateMarketId(state, marketId);\n        _setLiquidationSpreadPremium(state, marketId, liquidationSpreadPremium);\n    }\n\n    function ownerSetMaxSupplyWei(\n        Storage.State storage state,\n        uint256 marketId,\n        uint256 maxSupplyWei\n    )\n    public\n    {\n        _validateMarketId(state, marketId);\n        _setMaxSupplyWei(state, marketId, maxSupplyWei);\n    }\n\n    function ownerSetMaxBorrowWei(\n        Storage.State storage state,\n        uint256 marketId,\n        uint256 maxBorrowWei\n    )\n    public\n    {\n        _validateMarketId(state, marketId);\n        _setMaxBorrowWei(state, marketId, maxBorrowWei);\n    }\n\n    function ownerSetEarningsRateOverride(\n        Storage.State storage state,\n        uint256 marketId,\n        Decimal.D256 memory earningsRateOverride\n    )\n    public\n    {\n        _validateMarketId(state, marketId);\n        _setEarningsRateOverride(state, marketId, earningsRateOverride);\n    }\n\n    // ============ Risk Functions ============\n\n    function ownerSetMarginRatio(\n        Storage.State storage state,\n        Decimal.D256 memory ratio\n    )\n    public\n    {\n        Require.that(\n            ratio.value <= state.riskLimits.marginRatioMax,\n            FILE,\n            \"Ratio too high\"\n        );\n        Require.that(\n            ratio.value > state.riskParams.liquidationSpread.value,\n            FILE,\n            \"Ratio cannot be <= spread\"\n        );\n        state.riskParams.marginRatio = ratio;\n        emit LogSetMarginRatio(ratio);\n    }\n\n    function ownerSetLiquidationSpread(\n        Storage.State storage state,\n        Decimal.D256 memory spread\n    )\n    public\n    {\n        Require.that(\n            spread.value <= state.riskLimits.liquidationSpreadMax,\n            FILE,\n            \"Spread too high\"\n        );\n        Require.that(\n            spread.value < state.riskParams.marginRatio.value,\n            FILE,\n            \"Spread cannot be >= ratio\"\n        );\n        state.riskParams.liquidationSpread = spread;\n        emit LogSetLiquidationSpread(spread);\n    }\n\n    function ownerSetEarningsRate(\n        Storage.State storage state,\n        Decimal.D256 memory earningsRate\n    )\n    public\n    {\n        Require.that(\n            earningsRate.value <= state.riskLimits.earningsRateMax,\n            FILE,\n            \"Rate too high\"\n        );\n        state.riskParams.earningsRate = earningsRate;\n        emit LogSetEarningsRate(earningsRate);\n    }\n\n    function ownerSetMinBorrowedValue(\n        Storage.State storage state,\n        Monetary.Value memory minBorrowedValue\n    )\n    public\n    {\n        Require.that(\n            minBorrowedValue.value <= state.riskLimits.minBorrowedValueMax,\n            FILE,\n            \"Value too high\"\n        );\n        state.riskParams.minBorrowedValue = minBorrowedValue;\n        emit LogSetMinBorrowedValue(minBorrowedValue);\n    }\n\n    function ownerSetAccountMaxNumberOfMarketsWithBalances(\n        Storage.State storage state,\n        uint256 accountMaxNumberOfMarketsWithBalances\n    ) public {\n        Require.that(\n            accountMaxNumberOfMarketsWithBalances >= 2,\n            FILE,\n            \"Max number of markets too low\"\n        );\n        Require.that(\n            accountMaxNumberOfMarketsWithBalances <= 64,\n            FILE,\n            \"Max number of markets too high\"\n        );\n        state.riskParams.accountMaxNumberOfMarketsWithBalances = accountMaxNumberOfMarketsWithBalances;\n        emit LogSetAccountMaxNumberOfMarketsWithBalances(accountMaxNumberOfMarketsWithBalances);\n    }\n\n    function ownerSetOracleSentinel(\n        Storage.State storage state,\n        IOracleSentinel oracleSentinel\n    ) public {\n        Require.that(\n            oracleSentinel.isBorrowAllowed() && oracleSentinel.isLiquidationAllowed(),\n            FILE,\n            \"Invalid oracle sentinel\"\n        );\n        state.riskParams.oracleSentinel = oracleSentinel;\n        emit LogSetOracleSentinel(oracleSentinel);\n    }\n\n    function ownerSetCallbackGasLimit(\n        Storage.State storage state,\n        uint256 callbackGasLimit\n    ) public {\n        // Allow setting to any value.\n        // Setting to 0 will effectively disable callbacks; setting it super large is not desired since it could lead to\n        // DOS attacks on the protocol; however, hard coding a max value isn't preferred since some chains can calculate\n        // gas usage differently (like ArbGas before Arbitrum rolled out nitro)\n        state.riskParams.callbackGasLimit = callbackGasLimit;\n        emit LogSetCallbackGasLimit(callbackGasLimit);\n    }\n\n    function ownerSetDefaultAccountRiskOverride(\n        Storage.State storage state,\n        IAccountRiskOverrideSetter defaultAccountRiskOverrideSetter\n    ) public {\n        if (address(defaultAccountRiskOverrideSetter) != address(0)) {\n            (\n                Decimal.D256 memory marginRatio,\n                Decimal.D256 memory liquidationSpread\n            ) = defaultAccountRiskOverrideSetter.getAccountRiskOverride(_getDefaultAccount(msg.sender));\n            state.validateAccountRiskOverrideValues(marginRatio, liquidationSpread);\n        }\n\n        state.riskParams.defaultAccountRiskOverrideSetter = defaultAccountRiskOverrideSetter;\n        emit LogSetDefaultAccountRiskOverrideSetter(defaultAccountRiskOverrideSetter);\n    }\n\n    function ownerSetAccountRiskOverride(\n        Storage.State storage state,\n        address accountOwner,\n        IAccountRiskOverrideSetter accountRiskOverrideSetter\n    ) public {\n        if (address(accountRiskOverrideSetter) != address(0)) {\n            (\n                Decimal.D256 memory marginRatio,\n                Decimal.D256 memory liquidationSpread\n            ) = accountRiskOverrideSetter.getAccountRiskOverride(_getDefaultAccount(accountOwner));\n            state.validateAccountRiskOverrideValues(marginRatio, liquidationSpread);\n        }\n\n        state.riskParams.accountRiskOverrideSetterMap[accountOwner] = accountRiskOverrideSetter;\n        emit LogSetAccountRiskOverrideSetter(accountOwner, accountRiskOverrideSetter);\n    }\n\n    // ============ Global Operator Functions ============\n\n    function ownerSetGlobalOperator(\n        Storage.State storage state,\n        address operator,\n        bool approved\n    )\n    public\n    {\n        state.globalOperators[operator] = approved ? 1 : 2;\n\n        emit LogSetGlobalOperator(operator, approved);\n    }\n\n    function ownerSetAutoTraderSpecial(\n        Storage.State storage state,\n        address autoTrader,\n        bool isSpecial\n    )\n    public\n    {\n        state.specialAutoTraders[autoTrader] = isSpecial ? 1 : 2;\n\n        emit LogSetAutoTraderIsSpecial(autoTrader, isSpecial);\n    }\n\n    // ============ Private Functions ============\n\n    function _setPriceOracle(\n        Storage.State storage state,\n        uint256 marketId,\n        IPriceOracle priceOracle\n    )\n    private\n    {\n        // require oracle can return non-zero price\n        address token = state.markets[marketId].token;\n\n        Require.that(\n            priceOracle.getPrice(token).value != 0,\n            FILE,\n            \"Invalid oracle price\"\n        );\n\n        state.markets[marketId].priceOracle = priceOracle;\n\n        emit LogSetPriceOracle(marketId, address(priceOracle));\n    }\n\n    function _setInterestSetter(\n        Storage.State storage state,\n        uint256 marketId,\n        IInterestSetter interestSetter\n    )\n    private\n    {\n        // ensure interestSetter can return a value without reverting\n        address token = state.markets[marketId].token;\n        interestSetter.getInterestRate(token, 0, 0);\n\n        state.markets[marketId].interestSetter = interestSetter;\n\n        emit LogSetInterestSetter(marketId, address(interestSetter));\n    }\n\n    function _setMarginPremium(\n        Storage.State storage state,\n        uint256 marketId,\n        Decimal.D256 memory marginPremium\n    )\n    private\n    {\n        Require.that(\n            marginPremium.value <= state.riskLimits.marginPremiumMax,\n            FILE,\n            \"Margin premium too high\"\n        );\n        state.markets[marketId].marginPremium = marginPremium;\n\n        emit LogSetMarginPremium(marketId, marginPremium);\n    }\n\n    function _setLiquidationSpreadPremium(\n        Storage.State storage state,\n        uint256 marketId,\n        Decimal.D256 memory liquidationSpreadPremium\n    )\n    private\n    {\n        Require.that(\n            liquidationSpreadPremium.value <= state.riskLimits.liquidationSpreadPremiumMax,\n            FILE,\n            \"Spread premium too high\"\n        );\n        state.markets[marketId].liquidationSpreadPremium = liquidationSpreadPremium;\n\n        emit LogSetLiquidationSpreadPremium(marketId, liquidationSpreadPremium);\n    }\n\n    function _setMaxSupplyWei(\n        Storage.State storage state,\n        uint256 marketId,\n        uint256 maxSupplyWei\n    )\n    private\n    {\n        Types.Wei memory maxSupplyWeiStruct = Types.Wei(true, maxSupplyWei.to128());\n        state.markets[marketId].maxSupplyWei = maxSupplyWeiStruct;\n\n        emit LogSetMaxSupplyWei(marketId, maxSupplyWeiStruct);\n    }\n\n    function _setMaxBorrowWei(\n        Storage.State storage state,\n        uint256 marketId,\n        uint256 maxBorrowWei\n    )\n    private\n    {\n        Types.Wei memory maxBorrowWeiStruct = Types.Wei(false, maxBorrowWei.to128());\n        state.markets[marketId].maxBorrowWei = maxBorrowWeiStruct;\n\n        emit LogSetMaxBorrowWei(marketId, maxBorrowWeiStruct);\n    }\n\n    function _setEarningsRateOverride(\n        Storage.State storage state,\n        uint256 marketId,\n        Decimal.D256 memory earningsRateOverride\n    )\n    private\n    {\n        Require.that(\n            earningsRateOverride.value <= state.riskLimits.earningsRateMax,\n            FILE,\n            \"Earnings rate override too high\"\n        );\n\n        state.markets[marketId].earningsRateOverride = earningsRateOverride;\n\n        emit LogSetEarningsRateOverride(marketId, earningsRateOverride);\n    }\n\n    function _requireNoMarket(\n        Storage.State storage state,\n        address token\n    )\n    private\n    view\n    {\n        // not-found case is marketId of 0. 0 is a valid market ID so we need to check market ID 0's token equality.\n        uint marketId = state.tokenToMarketId[token];\n        bool marketExists = token == state.markets[marketId].token;\n\n        Require.that(\n            !marketExists,\n            FILE,\n            \"Market exists\"\n        );\n    }\n\n    function _validateMarketId(\n        Storage.State storage state,\n        uint256 marketId\n    )\n    private\n    view\n    {\n        Require.that(\n            marketId < state.numMarkets && state.markets[marketId].token != address(0),\n            FILE,\n            \"Invalid market\",\n            marketId\n        );\n    }\n\n    function _getDefaultAccount(\n        address _accountOwner\n    )\n    private\n    pure\n    returns (Account.Info memory)\n    {\n        return Account.Info({\n            owner: _accountOwner,\n            number: 0\n        });\n    }\n}\n",
  "sourcePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/impl/AdminImpl.sol",
  "ast": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/impl/AdminImpl.sol",
    "exportedSymbols": {
      "AdminImpl": [
        19547
      ]
    },
    "id": 19548,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18186,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".7"
        ],
        "nodeType": "PragmaDirective",
        "src": "603:23:68"
      },
      {
        "id": 18187,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "627:33:68"
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "id": 18189,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 37848,
        "src": "662:68:68",
        "symbolAliases": [
          {
            "foreign": 18188,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol",
        "file": "../interfaces/IERC20Detailed.sol",
        "id": 18191,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24716,
        "src": "732:66:68",
        "symbolAliases": [
          {
            "foreign": 18190,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol",
        "file": "../interfaces/IAccountRiskOverrideSetter.sol",
        "id": 18193,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24030,
        "src": "799:90:68",
        "symbolAliases": [
          {
            "foreign": 18192,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol",
        "file": "../interfaces/IInterestSetter.sol",
        "id": 18195,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24790,
        "src": "890:68:68",
        "symbolAliases": [
          {
            "foreign": 18194,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol",
        "file": "../interfaces/IOracleSentinel.sol",
        "id": 18197,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24818,
        "src": "959:68:68",
        "symbolAliases": [
          {
            "foreign": 18196,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol",
        "file": "../interfaces/IPriceOracle.sol",
        "id": 18199,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24836,
        "src": "1028:62:68",
        "symbolAliases": [
          {
            "foreign": 18198,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
        "file": "../lib/Account.sol",
        "id": 18201,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24886,
        "src": "1092:45:68",
        "symbolAliases": [
          {
            "foreign": 18200,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol",
        "file": "../lib/Decimal.sol",
        "id": 18203,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 26024,
        "src": "1138:45:68",
        "symbolAliases": [
          {
            "foreign": 18202,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol",
        "file": "../lib/Interest.sol",
        "id": 18205,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 27751,
        "src": "1184:47:68",
        "symbolAliases": [
          {
            "foreign": 18204,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol",
        "file": "../lib/DolomiteMarginMath.sol",
        "id": 18207,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 26239,
        "src": "1232:67:68",
        "symbolAliases": [
          {
            "foreign": 18206,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol",
        "file": "../lib/Monetary.sol",
        "id": 18209,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 27761,
        "src": "1300:47:68",
        "symbolAliases": [
          {
            "foreign": 18208,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
        "file": "../lib/Require.sol",
        "id": 18211,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 28453,
        "src": "1348:45:68",
        "symbolAliases": [
          {
            "foreign": 18210,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol",
        "file": "../lib/Storage.sol",
        "id": 18213,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 30712,
        "src": "1394:45:68",
        "symbolAliases": [
          {
            "foreign": 18212,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Token.sol",
        "file": "../lib/Token.sol",
        "id": 18215,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 30851,
        "src": "1440:41:68",
        "symbolAliases": [
          {
            "foreign": 18214,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
        "file": "../lib/Types.sol",
        "id": 18217,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 31362,
        "src": "1482:41:68",
        "symbolAliases": [
          {
            "foreign": 18216,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@title AdminImpl\n@author dYdX\n * Administrative functions to keep the protocol updated",
        "fullyImplemented": true,
        "id": 19547,
        "linearizedBaseContracts": [
          19547
        ],
        "name": "AdminImpl",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 18220,
            "libraryName": {
              "contractScope": null,
              "id": 18218,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 37847,
              "src": "1660:7:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$37847",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1654:26:68",
            "typeName": {
              "id": 18219,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1672:7:68",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 18223,
            "libraryName": {
              "contractScope": null,
              "id": 18221,
              "name": "DolomiteMarginMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26238,
              "src": "1691:18:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DolomiteMarginMath_$26238",
                "typeString": "library DolomiteMarginMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1685:37:68",
            "typeName": {
              "id": 18222,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1714:7:68",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 18226,
            "libraryName": {
              "contractScope": null,
              "id": 18224,
              "name": "Storage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30711,
              "src": "1733:7:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Storage_$30711",
                "typeString": "library Storage"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1727:32:68",
            "typeName": {
              "contractScope": null,
              "id": 18225,
              "name": "Storage.State",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28760,
              "src": "1745:13:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                "typeString": "struct Storage.State"
              }
            }
          },
          {
            "id": 18229,
            "libraryName": {
              "contractScope": null,
              "id": 18227,
              "name": "Token",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30850,
              "src": "1770:5:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Token_$30850",
                "typeString": "library Token"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1764:24:68",
            "typeName": {
              "id": 18228,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1780:7:68",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 18232,
            "libraryName": {
              "contractScope": null,
              "id": 18230,
              "name": "Types",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31361,
              "src": "1799:5:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Types_$31361",
                "typeString": "library Types"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1793:26:68",
            "typeName": {
              "contractScope": null,
              "id": 18231,
              "name": "Types.Wei",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31149,
              "src": "1809:9:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                "typeString": "struct Types.Wei"
              }
            }
          },
          {
            "constant": true,
            "id": 18235,
            "name": "FILE",
            "nodeType": "VariableDeclaration",
            "scope": 19547,
            "src": "1869:43:68",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 18233,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1869:7:68",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41646d696e496d706c",
              "id": 18234,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1901:11:68",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4b70a5e7c59e3d0b932d067bd46e7887c7f5c096c2fd4a9bfceb35c8e4308d36",
                "typeString": "literal_string \"AdminImpl\""
              },
              "value": "AdminImpl"
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18241,
            "name": "LogWithdrawExcessTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18240,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18237,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18241,
                  "src": "1999:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1999:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18239,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 18241,
                  "src": "2022:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18238,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2022:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1989:53:68"
            },
            "src": "1960:83:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18247,
            "name": "LogWithdrawUnsupportedTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18243,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18247,
                  "src": "2093:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2093:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18245,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 18247,
                  "src": "2116:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2083:53:68"
            },
            "src": "2049:88:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18253,
            "name": "LogAddMarket",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18249,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18253,
                  "src": "2171:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18248,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2171:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18251,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18253,
                  "src": "2197:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18250,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2197:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2161:55:68"
            },
            "src": "2143:74:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18259,
            "name": "LogSetIsClosing",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18258,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18255,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18259,
                  "src": "2254:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18254,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2254:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18257,
                  "indexed": false,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 18259,
                  "src": "2280:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18256,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2280:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2244:56:68"
            },
            "src": "2223:78:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18265,
            "name": "LogSetPriceOracle",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18261,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18265,
                  "src": "2340:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18260,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2340:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18263,
                  "indexed": false,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 18265,
                  "src": "2366:19:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18262,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2366:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2330:61:68"
            },
            "src": "2307:85:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18271,
            "name": "LogSetInterestSetter",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18267,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18271,
                  "src": "2434:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18266,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2434:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18269,
                  "indexed": false,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18271,
                  "src": "2460:22:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18268,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2460:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2424:64:68"
            },
            "src": "2398:91:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18277,
            "name": "LogSetMarginPremium",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18273,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18277,
                  "src": "2530:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18272,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2530:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18275,
                  "indexed": false,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18277,
                  "src": "2556:26:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18274,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2556:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2520:68:68"
            },
            "src": "2495:94:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18283,
            "name": "LogSetLiquidationSpreadPremium",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18282,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18279,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18283,
                  "src": "2641:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18278,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2641:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18281,
                  "indexed": false,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18283,
                  "src": "2667:37:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18280,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2667:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2631:79:68"
            },
            "src": "2595:116:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18289,
            "name": "LogSetMaxSupplyWei",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18285,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18289,
                  "src": "2751:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18284,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2751:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18287,
                  "indexed": false,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18289,
                  "src": "2777:22:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18286,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "2777:9:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2741:64:68"
            },
            "src": "2717:89:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18295,
            "name": "LogSetMaxBorrowWei",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18291,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18295,
                  "src": "2846:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2846:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18293,
                  "indexed": false,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18295,
                  "src": "2872:22:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18292,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "2872:9:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2836:64:68"
            },
            "src": "2812:89:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18301,
            "name": "LogSetEarningsRateOverride",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18300,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18297,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18301,
                  "src": "2949:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2949:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18299,
                  "indexed": false,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 18301,
                  "src": "2975:33:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18298,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2975:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2939:75:68"
            },
            "src": "2907:108:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18305,
            "name": "LogSetMarginRatio",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18303,
                  "indexed": false,
                  "name": "marginRatio",
                  "nodeType": "VariableDeclaration",
                  "scope": 18305,
                  "src": "3054:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18302,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3054:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3044:40:68"
            },
            "src": "3021:64:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18309,
            "name": "LogSetLiquidationSpread",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18307,
                  "indexed": false,
                  "name": "liquidationSpread",
                  "nodeType": "VariableDeclaration",
                  "scope": 18309,
                  "src": "3130:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18306,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3130:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3120:46:68"
            },
            "src": "3091:76:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18313,
            "name": "LogSetEarningsRate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18311,
                  "indexed": false,
                  "name": "earningsRate",
                  "nodeType": "VariableDeclaration",
                  "scope": 18313,
                  "src": "3207:25:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18310,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3207:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3197:41:68"
            },
            "src": "3173:66:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18317,
            "name": "LogSetMinBorrowedValue",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18315,
                  "indexed": false,
                  "name": "minBorrowedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 18317,
                  "src": "3283:31:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18314,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "3283:14:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3273:47:68"
            },
            "src": "3245:76:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18321,
            "name": "LogSetAccountMaxNumberOfMarketsWithBalances",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18319,
                  "indexed": false,
                  "name": "accountMaxNumberOfMarketsWithBalances",
                  "nodeType": "VariableDeclaration",
                  "scope": 18321,
                  "src": "3386:45:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3386:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3376:61:68"
            },
            "src": "3327:111:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18325,
            "name": "LogSetOracleSentinel",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18323,
                  "indexed": false,
                  "name": "oracleSentinel",
                  "nodeType": "VariableDeclaration",
                  "scope": 18325,
                  "src": "3480:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                    "typeString": "contract IOracleSentinel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18322,
                    "name": "IOracleSentinel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24817,
                    "src": "3480:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3470:46:68"
            },
            "src": "3444:73:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18329,
            "name": "LogSetCallbackGasLimit",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18327,
                  "indexed": false,
                  "name": "callbackGasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 18329,
                  "src": "3561:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3561:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3551:40:68"
            },
            "src": "3523:69:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18333,
            "name": "LogSetDefaultAccountRiskOverrideSetter",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18331,
                  "indexed": false,
                  "name": "defaultAccountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18333,
                  "src": "3652:59:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18330,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "3652:26:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3642:75:68"
            },
            "src": "3598:120:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18339,
            "name": "LogSetAccountRiskOverrideSetter",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18335,
                  "indexed": false,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 18339,
                  "src": "3771:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18334,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3771:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18337,
                  "indexed": false,
                  "name": "accountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18339,
                  "src": "3801:52:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18336,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "3801:26:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3761:98:68"
            },
            "src": "3724:136:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18345,
            "name": "LogSetGlobalOperator",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18341,
                  "indexed": false,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 18345,
                  "src": "3902:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18340,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3902:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18343,
                  "indexed": false,
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 18345,
                  "src": "3928:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18342,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3928:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3892:55:68"
            },
            "src": "3866:82:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18351,
            "name": "LogSetAutoTraderIsSpecial",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18347,
                  "indexed": false,
                  "name": "autoTrader",
                  "nodeType": "VariableDeclaration",
                  "scope": 18351,
                  "src": "3995:18:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18346,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3995:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18349,
                  "indexed": false,
                  "name": "isSpecial",
                  "nodeType": "VariableDeclaration",
                  "scope": 18351,
                  "src": "4023:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18348,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4023:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3985:58:68"
            },
            "src": "3954:90:68"
          },
          {
            "body": {
              "id": 18434,
              "nodeType": "Block",
              "src": "4268:626:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18363,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18353,
                        "src": "4296:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18364,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18355,
                        "src": "4303:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18362,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "4278:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4278:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18366,
                  "nodeType": "ExpressionStatement",
                  "src": "4278:34:68"
                },
                {
                  "assignments": [
                    18370
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18370,
                      "name": "excessWei",
                      "nodeType": "VariableDeclaration",
                      "scope": 18434,
                      "src": "4322:26:68",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 18369,
                        "name": "Types.Wei",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 31149,
                        "src": "4322:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                          "typeString": "struct Types.Wei"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18375,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18373,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18355,
                        "src": "4376:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18371,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18353,
                        "src": "4351:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      "id": 18372,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getNumExcessTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28912,
                      "src": "4351:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$_t_struct$_Wei_$31149_memory_ptr_$bound_to$_t_struct$_State_$28760_storage_ptr_$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view returns (struct Types.Wei memory)"
                      }
                    },
                    "id": 18374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4351:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                      "typeString": "struct Types.Wei memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4322:63:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "4422:23:68",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 18379,
                              "name": "excessWei",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18370,
                              "src": "4423:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                                "typeString": "struct Types.Wei memory"
                              }
                            },
                            "id": 18380,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isNegative",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 31331,
                            "src": "4423:20:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_Wei_$31149_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Wei_$31149_memory_ptr_$",
                              "typeString": "function (struct Types.Wei memory) pure returns (bool)"
                            }
                          },
                          "id": 18381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4423:22:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18383,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "4459:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6567617469766520657863657373",
                        "id": 18384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4477:17:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1694077b1d3a41b6efa6b359ff29d037b08435c5c42340397982ef9c0bd82585",
                          "typeString": "literal_string \"Negative excess\""
                        },
                        "value": "Negative excess"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1694077b1d3a41b6efa6b359ff29d037b08435c5c42340397982ef9c0bd82585",
                          "typeString": "literal_string \"Negative excess\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18376,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "4396:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "4396:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4396:108:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18386,
                  "nodeType": "ExpressionStatement",
                  "src": "4396:108:68"
                },
                {
                  "assignments": [
                    18388
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18388,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 18434,
                      "src": "4515:13:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18387,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4515:7:68",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18393,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18391,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18355,
                        "src": "4546:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18389,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18353,
                        "src": "4531:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      "id": 18390,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28776,
                      "src": "4531:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_State_$28760_storage_ptr_$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view returns (address)"
                      }
                    },
                    "id": 18392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4531:24:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4515:40:68"
                },
                {
                  "assignments": [
                    18395
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18395,
                      "name": "actualBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 18434,
                      "src": "4566:21:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18394,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4566:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18404,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18401,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38313,
                            "src": "4630:4:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AdminImpl_$19547",
                              "typeString": "library AdminImpl"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AdminImpl_$19547",
                              "typeString": "library AdminImpl"
                            }
                          ],
                          "id": 18400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4622:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4622:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18397,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18388,
                            "src": "4605:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18396,
                          "name": "IERC20Detailed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24715,
                          "src": "4590:14:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Detailed_$24715_$",
                            "typeString": "type(contract IERC20Detailed)"
                          }
                        },
                        "id": 18398,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4590:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Detailed_$24715",
                          "typeString": "contract IERC20Detailed"
                        }
                      },
                      "id": 18399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 37497,
                      "src": "4590:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 18403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4590:46:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4566:70:68"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18405,
                        "name": "excessWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18370,
                        "src": "4650:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      },
                      "id": 18406,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31148,
                      "src": "4650:15:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 18407,
                      "name": "actualBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18395,
                      "src": "4668:13:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4650:31:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18416,
                  "nodeType": "IfStatement",
                  "src": "4646:93:68",
                  "trueBody": {
                    "id": 18415,
                    "nodeType": "Block",
                    "src": "4683:56:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18409,
                              "name": "excessWei",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18370,
                              "src": "4697:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                                "typeString": "struct Types.Wei memory"
                              }
                            },
                            "id": 18411,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 31148,
                            "src": "4697:15:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 18412,
                            "name": "actualBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18395,
                            "src": "4715:13:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4697:31:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18414,
                        "nodeType": "ExpressionStatement",
                        "src": "4697:31:68"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18420,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18357,
                        "src": "4764:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18421,
                          "name": "excessWei",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18370,
                          "src": "4775:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                            "typeString": "struct Types.Wei memory"
                          }
                        },
                        "id": 18422,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 31148,
                        "src": "4775:15:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18417,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18388,
                        "src": "4749:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 18419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30771,
                      "src": "4749:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 18423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4749:42:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18424,
                  "nodeType": "ExpressionStatement",
                  "src": "4749:42:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18426,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18388,
                        "src": "4831:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18427,
                          "name": "excessWei",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18370,
                          "src": "4838:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                            "typeString": "struct Types.Wei memory"
                          }
                        },
                        "id": 18428,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 31148,
                        "src": "4838:15:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18425,
                      "name": "LogWithdrawExcessTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18241,
                      "src": "4807:23:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 18429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4807:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18430,
                  "nodeType": "EmitStatement",
                  "src": "4802:52:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 18431,
                      "name": "excessWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18370,
                      "src": "4872:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei memory"
                      }
                    },
                    "id": 18432,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 31148,
                    "src": "4872:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 18361,
                  "id": 18433,
                  "nodeType": "Return",
                  "src": "4865:22:68"
                }
              ]
            },
            "documentation": null,
            "id": 18435,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerWithdrawExcessTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18353,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18435,
                  "src": "4144:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18352,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "4144:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18355,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18435,
                  "src": "4181:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18354,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4181:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18357,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 18435,
                  "src": "4207:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4207:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4134:96:68"
            },
            "returnParameters": {
              "id": 18361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18360,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18435,
                  "src": "4255:7:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18359,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4255:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4254:9:68"
            },
            "scope": 19547,
            "src": "4100:794:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18476,
              "nodeType": "Block",
              "src": "5070:251:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18447,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18437,
                        "src": "5097:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18448,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18439,
                        "src": "5104:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18446,
                      "name": "_requireNoMarket",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19502,
                      "src": "5080:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_address_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,address) view"
                      }
                    },
                    "id": 18449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5080:30:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18450,
                  "nodeType": "ExpressionStatement",
                  "src": "5080:30:68"
                },
                {
                  "assignments": [
                    18452
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18452,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 18476,
                      "src": "5121:15:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18451,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5121:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18461,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18458,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38313,
                            "src": "5179:4:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AdminImpl_$19547",
                              "typeString": "library AdminImpl"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AdminImpl_$19547",
                              "typeString": "library AdminImpl"
                            }
                          ],
                          "id": 18457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5171:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18459,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5171:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18454,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18439,
                            "src": "5154:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18453,
                          "name": "IERC20Detailed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24715,
                          "src": "5139:14:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Detailed_$24715_$",
                            "typeString": "type(contract IERC20Detailed)"
                          }
                        },
                        "id": 18455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5139:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Detailed_$24715",
                          "typeString": "contract IERC20Detailed"
                        }
                      },
                      "id": 18456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 37497,
                      "src": "5139:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 18460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5139:46:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5121:64:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18465,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18441,
                        "src": "5210:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18466,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18452,
                        "src": "5221:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18462,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18439,
                        "src": "5195:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 18464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30771,
                      "src": "5195:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 18467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5195:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18468,
                  "nodeType": "ExpressionStatement",
                  "src": "5195:34:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18470,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18439,
                        "src": "5274:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18471,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18452,
                        "src": "5281:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18469,
                      "name": "LogWithdrawUnsupportedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18247,
                      "src": "5245:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 18472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5245:44:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18473,
                  "nodeType": "EmitStatement",
                  "src": "5240:49:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18474,
                    "name": "balance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18452,
                    "src": "5307:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 18445,
                  "id": 18475,
                  "nodeType": "Return",
                  "src": "5300:14:68"
                }
              ]
            },
            "documentation": null,
            "id": 18477,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerWithdrawUnsupportedTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18442,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18437,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18477,
                  "src": "4949:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18436,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "4949:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18439,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18477,
                  "src": "4986:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4986:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18441,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 18477,
                  "src": "5009:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5009:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4939:93:68"
            },
            "returnParameters": {
              "id": 18445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18444,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18477,
                  "src": "5057:7:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5057:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5056:9:68"
            },
            "scope": 19547,
            "src": "4900:421:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18608,
              "nodeType": "Block",
              "src": "5788:916:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18501,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "5815:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18502,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18481,
                        "src": "5822:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18500,
                      "name": "_requireNoMarket",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19502,
                      "src": "5798:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_address_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,address) view"
                      }
                    },
                    "id": 18503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5798:30:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18504,
                  "nodeType": "ExpressionStatement",
                  "src": "5798:30:68"
                },
                {
                  "assignments": [
                    18506
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18506,
                      "name": "marketId",
                      "nodeType": "VariableDeclaration",
                      "scope": 18608,
                      "src": "5839:16:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18505,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5839:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18509,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 18507,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18479,
                      "src": "5858:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                        "typeString": "struct Storage.State storage pointer"
                      }
                    },
                    "id": 18508,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "numMarkets",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28727,
                    "src": "5858:16:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5839:35:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18510,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "5884:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      "id": 18512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "numMarkets",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28727,
                      "src": "5884:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 18513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5904:1:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "5884:21:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18515,
                  "nodeType": "ExpressionStatement",
                  "src": "5884:21:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18516,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18479,
                            "src": "5916:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 18519,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "5916:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 18520,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18518,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18506,
                          "src": "5930:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5916:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 18521,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28668,
                      "src": "5916:29:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18522,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18481,
                      "src": "5948:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5916:37:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 18524,
                  "nodeType": "ExpressionStatement",
                  "src": "5916:37:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18525,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18479,
                            "src": "5963:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 18528,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "5963:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 18529,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18527,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18506,
                          "src": "5977:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5963:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 18530,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "index",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28674,
                      "src": "5963:29:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Index_$27471_storage",
                        "typeString": "struct Interest.Index storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 18531,
                          "name": "Interest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27750,
                          "src": "5995:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Interest_$27750_$",
                            "typeString": "type(library Interest)"
                          }
                        },
                        "id": 18532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "newIndex",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27606,
                        "src": "5995:17:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Index_$27471_memory_ptr_$",
                          "typeString": "function () view returns (struct Interest.Index memory)"
                        }
                      },
                      "id": 18533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5995:19:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Index_$27471_memory_ptr",
                        "typeString": "struct Interest.Index memory"
                      }
                    },
                    "src": "5963:51:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Index_$27471_storage",
                      "typeString": "struct Interest.Index storage ref"
                    }
                  },
                  "id": 18535,
                  "nodeType": "ExpressionStatement",
                  "src": "5963:51:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18536,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18479,
                            "src": "6024:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 18539,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "6024:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 18540,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18538,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18506,
                          "src": "6038:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6024:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 18541,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isClosing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28670,
                      "src": "6024:33:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18542,
                      "name": "isClosing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18497,
                      "src": "6060:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6024:45:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18544,
                  "nodeType": "ExpressionStatement",
                  "src": "6024:45:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18545,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18479,
                          "src": "6079:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18548,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenToMarketId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28735,
                        "src": "6079:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 18549,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 18547,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18481,
                        "src": "6101:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6079:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18550,
                      "name": "marketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18506,
                      "src": "6110:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6079:39:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18552,
                  "nodeType": "ExpressionStatement",
                  "src": "6079:39:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18554,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6147:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18555,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18481,
                        "src": "6157:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18553,
                      "name": "LogAddMarket",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18253,
                      "src": "6134:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 18556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6134:29:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18557,
                  "nodeType": "EmitStatement",
                  "src": "6129:34:68"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 18558,
                    "name": "isClosing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18497,
                    "src": "6177:9:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18565,
                  "nodeType": "IfStatement",
                  "src": "6173:81:68",
                  "trueBody": {
                    "id": 18564,
                    "nodeType": "Block",
                    "src": "6188:66:68",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 18560,
                              "name": "marketId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18506,
                              "src": "6223:8:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18561,
                              "name": "isClosing",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18497,
                              "src": "6233:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 18559,
                            "name": "LogSetIsClosing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18259,
                            "src": "6207:15:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                              "typeString": "function (uint256,bool)"
                            }
                          },
                          "id": 18562,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6207:36:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 18563,
                        "nodeType": "EmitStatement",
                        "src": "6202:41:68"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18567,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6280:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18568,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6287:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18569,
                        "name": "priceOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18483,
                        "src": "6297:11:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                          "typeString": "contract IPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                          "typeString": "contract IPriceOracle"
                        }
                      ],
                      "id": 18566,
                      "name": "_setPriceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19243,
                      "src": "6264:15:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_contract$_IPriceOracle_$24835_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,contract IPriceOracle)"
                      }
                    },
                    "id": 18570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6264:45:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18571,
                  "nodeType": "ExpressionStatement",
                  "src": "6264:45:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18573,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6338:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18574,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6345:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18575,
                        "name": "interestSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18485,
                        "src": "6355:14:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      ],
                      "id": 18572,
                      "name": "_setInterestSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19285,
                      "src": "6319:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_contract$_IInterestSetter_$24789_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,contract IInterestSetter)"
                      }
                    },
                    "id": 18576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6319:51:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18577,
                  "nodeType": "ExpressionStatement",
                  "src": "6319:51:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18579,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6398:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18580,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6405:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18581,
                        "name": "marginPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18487,
                        "src": "6415:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18578,
                      "name": "_setMarginPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19322,
                      "src": "6380:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6380:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18583,
                  "nodeType": "ExpressionStatement",
                  "src": "6380:49:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18585,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6468:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18586,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6475:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18587,
                        "name": "liquidationSpreadPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18489,
                        "src": "6485:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18584,
                      "name": "_setLiquidationSpreadPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19359,
                      "src": "6439:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6439:71:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18589,
                  "nodeType": "ExpressionStatement",
                  "src": "6439:71:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18591,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6537:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18592,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6544:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18593,
                        "name": "maxSupplyWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18491,
                        "src": "6554:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18590,
                      "name": "_setMaxSupplyWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19395,
                      "src": "6520:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,uint256)"
                      }
                    },
                    "id": 18594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6520:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18595,
                  "nodeType": "ExpressionStatement",
                  "src": "6520:47:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18597,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6594:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18598,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6601:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18599,
                        "name": "maxBorrowWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18493,
                        "src": "6611:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18596,
                      "name": "_setMaxBorrowWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19431,
                      "src": "6577:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,uint256)"
                      }
                    },
                    "id": 18600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6577:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18601,
                  "nodeType": "ExpressionStatement",
                  "src": "6577:47:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18603,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6659:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18604,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6666:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18605,
                        "name": "earningsRateOverride",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18495,
                        "src": "6676:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18602,
                      "name": "_setEarningsRateOverride",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19468,
                      "src": "6634:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6634:63:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18607,
                  "nodeType": "ExpressionStatement",
                  "src": "6634:63:68"
                }
              ]
            },
            "documentation": null,
            "id": 18609,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerAddMarket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18498,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18479,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5411:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18478,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "5411:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18481,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5448:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18480,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5448:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18483,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5471:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18482,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "5471:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18485,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5505:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18484,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "5505:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18487,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5545:33:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18486,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "5545:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18489,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5588:44:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18488,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "5588:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18491,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5642:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18490,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5642:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18493,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5672:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5672:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18495,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5702:40:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18494,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "5702:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18497,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5752:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18496,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5752:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5401:371:68"
            },
            "returnParameters": {
              "id": 18499,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5788:0:68"
            },
            "scope": 19547,
            "src": "5378:1326:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18637,
              "nodeType": "Block",
              "src": "6845:158:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18619,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18611,
                        "src": "6873:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18620,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18613,
                        "src": "6880:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18618,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "6855:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6855:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18622,
                  "nodeType": "ExpressionStatement",
                  "src": "6855:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18623,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18611,
                            "src": "6900:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 18626,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "6900:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 18627,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18625,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18613,
                          "src": "6914:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6900:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 18628,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isClosing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28670,
                      "src": "6900:33:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18629,
                      "name": "isClosing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18615,
                      "src": "6936:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6900:45:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18631,
                  "nodeType": "ExpressionStatement",
                  "src": "6900:45:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18633,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18613,
                        "src": "6976:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18634,
                        "name": "isClosing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18615,
                        "src": "6986:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18632,
                      "name": "LogSetIsClosing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18259,
                      "src": "6960:15:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 18635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6960:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18636,
                  "nodeType": "EmitStatement",
                  "src": "6955:41:68"
                }
              ]
            },
            "documentation": null,
            "id": 18638,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetIsClosing",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18611,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18638,
                  "src": "6746:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18610,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "6746:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18613,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18638,
                  "src": "6783:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18612,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6783:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18615,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 18638,
                  "src": "6809:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18614,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6809:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6736:93:68"
            },
            "returnParameters": {
              "id": 18617,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6845:0:68"
            },
            "scope": 19547,
            "src": "6710:293:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18658,
              "nodeType": "Block",
              "src": "7156:106:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18648,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18640,
                        "src": "7184:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18649,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18642,
                        "src": "7191:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18647,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "7166:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7166:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18651,
                  "nodeType": "ExpressionStatement",
                  "src": "7166:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18653,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18640,
                        "src": "7226:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18654,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18642,
                        "src": "7233:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18655,
                        "name": "priceOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18644,
                        "src": "7243:11:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                          "typeString": "contract IPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                          "typeString": "contract IPriceOracle"
                        }
                      ],
                      "id": 18652,
                      "name": "_setPriceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19243,
                      "src": "7210:15:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_contract$_IPriceOracle_$24835_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,contract IPriceOracle)"
                      }
                    },
                    "id": 18656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7210:45:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18657,
                  "nodeType": "ExpressionStatement",
                  "src": "7210:45:68"
                }
              ]
            },
            "documentation": null,
            "id": 18659,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetPriceOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18645,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18640,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18659,
                  "src": "7047:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18639,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "7047:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18642,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18659,
                  "src": "7084:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18641,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7084:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18644,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 18659,
                  "src": "7110:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18643,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "7110:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7037:103:68"
            },
            "returnParameters": {
              "id": 18646,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7156:0:68"
            },
            "scope": 19547,
            "src": "7009:253:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18679,
              "nodeType": "Block",
              "src": "7424:112:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18669,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18661,
                        "src": "7452:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18670,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18663,
                        "src": "7459:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18668,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "7434:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7434:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18672,
                  "nodeType": "ExpressionStatement",
                  "src": "7434:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18674,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18661,
                        "src": "7497:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18675,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18663,
                        "src": "7504:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18676,
                        "name": "interestSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18665,
                        "src": "7514:14:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      ],
                      "id": 18673,
                      "name": "_setInterestSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19285,
                      "src": "7478:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_contract$_IInterestSetter_$24789_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,contract IInterestSetter)"
                      }
                    },
                    "id": 18677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7478:51:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18678,
                  "nodeType": "ExpressionStatement",
                  "src": "7478:51:68"
                }
              ]
            },
            "documentation": null,
            "id": 18680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetInterestSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18661,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18680,
                  "src": "7309:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18660,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "7309:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18663,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18680,
                  "src": "7346:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18662,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7346:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18665,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18680,
                  "src": "7372:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18664,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "7372:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7299:109:68"
            },
            "returnParameters": {
              "id": 18667,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7424:0:68"
            },
            "scope": 19547,
            "src": "7268:268:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18700,
              "nodeType": "Block",
              "src": "7700:110:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18690,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18682,
                        "src": "7728:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18691,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18684,
                        "src": "7735:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18689,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "7710:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7710:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18693,
                  "nodeType": "ExpressionStatement",
                  "src": "7710:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18695,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18682,
                        "src": "7772:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18696,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18684,
                        "src": "7779:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18697,
                        "name": "marginPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18686,
                        "src": "7789:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18694,
                      "name": "_setMarginPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19322,
                      "src": "7754:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7754:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18699,
                  "nodeType": "ExpressionStatement",
                  "src": "7754:49:68"
                }
              ]
            },
            "documentation": null,
            "id": 18701,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMarginPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18682,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18701,
                  "src": "7582:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18681,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "7582:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18684,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18701,
                  "src": "7619:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18683,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7619:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18686,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18701,
                  "src": "7645:33:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18685,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7645:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7572:112:68"
            },
            "returnParameters": {
              "id": 18688,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7700:0:68"
            },
            "scope": 19547,
            "src": "7542:268:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18721,
              "nodeType": "Block",
              "src": "7996:132:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18711,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18703,
                        "src": "8024:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18712,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18705,
                        "src": "8031:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18710,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "8006:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8006:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18714,
                  "nodeType": "ExpressionStatement",
                  "src": "8006:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18716,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18703,
                        "src": "8079:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18717,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18705,
                        "src": "8086:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18718,
                        "name": "liquidationSpreadPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18707,
                        "src": "8096:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18715,
                      "name": "_setLiquidationSpreadPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19359,
                      "src": "8050:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8050:71:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18720,
                  "nodeType": "ExpressionStatement",
                  "src": "8050:71:68"
                }
              ]
            },
            "documentation": null,
            "id": 18722,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetLiquidationSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18703,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18722,
                  "src": "7867:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18702,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "7867:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18705,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18722,
                  "src": "7904:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18704,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7904:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18707,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18722,
                  "src": "7930:44:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18706,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7930:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7857:123:68"
            },
            "returnParameters": {
              "id": 18709,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7996:0:68"
            },
            "scope": 19547,
            "src": "7816:312:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18742,
              "nodeType": "Block",
              "src": "8278:108:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18732,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18724,
                        "src": "8306:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18733,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18726,
                        "src": "8313:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18731,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "8288:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8288:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18735,
                  "nodeType": "ExpressionStatement",
                  "src": "8288:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18737,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18724,
                        "src": "8349:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18738,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18726,
                        "src": "8356:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18739,
                        "name": "maxSupplyWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18728,
                        "src": "8366:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18736,
                      "name": "_setMaxSupplyWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19395,
                      "src": "8332:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,uint256)"
                      }
                    },
                    "id": 18740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8332:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18741,
                  "nodeType": "ExpressionStatement",
                  "src": "8332:47:68"
                }
              ]
            },
            "documentation": null,
            "id": 18743,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMaxSupplyWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18729,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18724,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18743,
                  "src": "8173:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18723,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "8173:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18726,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18743,
                  "src": "8210:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8210:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18728,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18743,
                  "src": "8236:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18727,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8236:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8163:99:68"
            },
            "returnParameters": {
              "id": 18730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8278:0:68"
            },
            "scope": 19547,
            "src": "8134:252:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18763,
              "nodeType": "Block",
              "src": "8536:108:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18753,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18745,
                        "src": "8564:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18754,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18747,
                        "src": "8571:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18752,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "8546:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8546:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18756,
                  "nodeType": "ExpressionStatement",
                  "src": "8546:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18758,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18745,
                        "src": "8607:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18759,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18747,
                        "src": "8614:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18760,
                        "name": "maxBorrowWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18749,
                        "src": "8624:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18757,
                      "name": "_setMaxBorrowWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19431,
                      "src": "8590:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,uint256)"
                      }
                    },
                    "id": 18761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8590:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18762,
                  "nodeType": "ExpressionStatement",
                  "src": "8590:47:68"
                }
              ]
            },
            "documentation": null,
            "id": 18764,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMaxBorrowWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18750,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18745,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18764,
                  "src": "8431:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18744,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "8431:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18747,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18764,
                  "src": "8468:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18746,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8468:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18749,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18764,
                  "src": "8494:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18748,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8494:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8421:99:68"
            },
            "returnParameters": {
              "id": 18751,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8536:0:68"
            },
            "scope": 19547,
            "src": "8392:252:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18784,
              "nodeType": "Block",
              "src": "8822:124:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18774,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18766,
                        "src": "8850:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18775,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18768,
                        "src": "8857:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18773,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "8832:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8832:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18777,
                  "nodeType": "ExpressionStatement",
                  "src": "8832:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18779,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18766,
                        "src": "8901:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18780,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18768,
                        "src": "8908:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18781,
                        "name": "earningsRateOverride",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18770,
                        "src": "8918:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18778,
                      "name": "_setEarningsRateOverride",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19468,
                      "src": "8876:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8876:63:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18783,
                  "nodeType": "ExpressionStatement",
                  "src": "8876:63:68"
                }
              ]
            },
            "documentation": null,
            "id": 18785,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetEarningsRateOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18766,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18785,
                  "src": "8697:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18765,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "8697:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18768,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18785,
                  "src": "8734:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8734:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18770,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 18785,
                  "src": "8760:40:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18769,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "8760:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8687:119:68"
            },
            "returnParameters": {
              "id": 18772,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8822:0:68"
            },
            "scope": 19547,
            "src": "8650:296:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18831,
              "nodeType": "Block",
              "src": "9123:391:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18795,
                            "name": "ratio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18789,
                            "src": "9159:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18796,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9159:11:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18797,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18787,
                              "src": "9174:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 18798,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "9174:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 18799,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "marginRatioMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28712,
                          "src": "9174:31:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "9159:46:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18801,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "9219:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526174696f20746f6f2068696768",
                        "id": 18802,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9237:16:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d1c35770d302ac7e441261e804be2a1cd737155595352d0e2a8c5066b83dc3",
                          "typeString": "literal_string \"Ratio too high\""
                        },
                        "value": "Ratio too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d1c35770d302ac7e441261e804be2a1cd737155595352d0e2a8c5066b83dc3",
                          "typeString": "literal_string \"Ratio too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18792,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "9133:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "9133:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9133:130:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18804,
                  "nodeType": "ExpressionStatement",
                  "src": "9133:130:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18808,
                            "name": "ratio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18789,
                            "src": "9299:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18809,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9299:11:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18810,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18787,
                                "src": "9313:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                  "typeString": "struct Storage.State storage pointer"
                                }
                              },
                              "id": 18811,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "riskParams",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28757,
                              "src": "9313:16:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                                "typeString": "struct Storage.RiskParams storage ref"
                              }
                            },
                            "id": 18812,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "liquidationSpread",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28693,
                            "src": "9313:34:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_storage",
                              "typeString": "struct Decimal.D256 storage ref"
                            }
                          },
                          "id": 18813,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9313:40:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9299:54:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18815,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "9367:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526174696f2063616e6e6f74206265203c3d20737072656164",
                        "id": 18816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9385:27:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_74d76c251be78a661296cb71ed2ac6b72b2be2c9fadd5e26131efaec3d9dffb0",
                          "typeString": "literal_string \"Ratio cannot be <= spread\""
                        },
                        "value": "Ratio cannot be <= spread"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_74d76c251be78a661296cb71ed2ac6b72b2be2c9fadd5e26131efaec3d9dffb0",
                          "typeString": "literal_string \"Ratio cannot be <= spread\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18805,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "9273:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18807,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "9273:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9273:149:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18818,
                  "nodeType": "ExpressionStatement",
                  "src": "9273:149:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18819,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18787,
                          "src": "9432:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18822,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "9432:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18823,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "marginRatio",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28691,
                      "src": "9432:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18824,
                      "name": "ratio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18789,
                      "src": "9463:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "9432:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 18826,
                  "nodeType": "ExpressionStatement",
                  "src": "9432:36:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18828,
                        "name": "ratio",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18789,
                        "src": "9501:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18827,
                      "name": "LogSetMarginRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18305,
                      "src": "9483:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9483:24:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18830,
                  "nodeType": "EmitStatement",
                  "src": "9478:29:68"
                }
              ]
            },
            "documentation": null,
            "id": 18832,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMarginRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18787,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18832,
                  "src": "9039:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18786,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "9039:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18789,
                  "name": "ratio",
                  "nodeType": "VariableDeclaration",
                  "scope": 18832,
                  "src": "9076:25:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18788,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "9076:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9029:78:68"
            },
            "returnParameters": {
              "id": 18791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9123:0:68"
            },
            "scope": 19547,
            "src": "9001:513:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18878,
              "nodeType": "Block",
              "src": "9649:408:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18847,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18842,
                            "name": "spread",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18836,
                            "src": "9685:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18843,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9685:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18844,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18834,
                              "src": "9701:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 18845,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "9701:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 18846,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "liquidationSpreadMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28714,
                          "src": "9701:37:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "9685:53:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18848,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "9752:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53707265616420746f6f2068696768",
                        "id": 18849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9770:17:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8cfbe7ddd2c203e310d7f7408f1f8dadfdbb31bf0759a10ab43fcfe9b9acdac",
                          "typeString": "literal_string \"Spread too high\""
                        },
                        "value": "Spread too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8cfbe7ddd2c203e310d7f7408f1f8dadfdbb31bf0759a10ab43fcfe9b9acdac",
                          "typeString": "literal_string \"Spread too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18839,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "9659:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "9659:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9659:138:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18851,
                  "nodeType": "ExpressionStatement",
                  "src": "9659:138:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18855,
                            "name": "spread",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18836,
                            "src": "9833:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18856,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9833:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18857,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18834,
                                "src": "9848:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                  "typeString": "struct Storage.State storage pointer"
                                }
                              },
                              "id": 18858,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "riskParams",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28757,
                              "src": "9848:16:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                                "typeString": "struct Storage.RiskParams storage ref"
                              }
                            },
                            "id": 18859,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "marginRatio",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28691,
                            "src": "9848:28:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_storage",
                              "typeString": "struct Decimal.D256 storage ref"
                            }
                          },
                          "id": 18860,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9848:34:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9833:49:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18862,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "9896:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5370726561642063616e6e6f74206265203e3d20726174696f",
                        "id": 18863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9914:27:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dedb0136cb33a52e3dbc4c7418335c2535b3ada24d36517f389ee36a9346ad99",
                          "typeString": "literal_string \"Spread cannot be >= ratio\""
                        },
                        "value": "Spread cannot be >= ratio"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dedb0136cb33a52e3dbc4c7418335c2535b3ada24d36517f389ee36a9346ad99",
                          "typeString": "literal_string \"Spread cannot be >= ratio\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18852,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "9807:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18854,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "9807:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9807:144:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18865,
                  "nodeType": "ExpressionStatement",
                  "src": "9807:144:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18866,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18834,
                          "src": "9961:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18869,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "9961:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18870,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "liquidationSpread",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28693,
                      "src": "9961:34:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18871,
                      "name": "spread",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18836,
                      "src": "9998:6:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "9961:43:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 18873,
                  "nodeType": "ExpressionStatement",
                  "src": "9961:43:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18875,
                        "name": "spread",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18836,
                        "src": "10043:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18874,
                      "name": "LogSetLiquidationSpread",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18309,
                      "src": "10019:23:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10019:31:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18877,
                  "nodeType": "EmitStatement",
                  "src": "10014:36:68"
                }
              ]
            },
            "documentation": null,
            "id": 18879,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetLiquidationSpread",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18837,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18834,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18879,
                  "src": "9564:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18833,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "9564:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18836,
                  "name": "spread",
                  "nodeType": "VariableDeclaration",
                  "scope": 18879,
                  "src": "9601:26:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18835,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "9601:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9554:79:68"
            },
            "returnParameters": {
              "id": 18838,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9649:0:68"
            },
            "scope": 19547,
            "src": "9520:537:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18911,
              "nodeType": "Block",
              "src": "10193:255:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18889,
                            "name": "earningsRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18883,
                            "src": "10229:12:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18890,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "10229:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18891,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18881,
                              "src": "10251:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 18892,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "10251:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 18893,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "earningsRateMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28716,
                          "src": "10251:32:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "10229:54:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18895,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "10297:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5261746520746f6f2068696768",
                        "id": 18896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10315:15:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7239863884fd78e1fcc1bb23093789e3e4a6fc4746a33bac7fd8ca038fba5641",
                          "typeString": "literal_string \"Rate too high\""
                        },
                        "value": "Rate too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7239863884fd78e1fcc1bb23093789e3e4a6fc4746a33bac7fd8ca038fba5641",
                          "typeString": "literal_string \"Rate too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18886,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "10203:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18888,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "10203:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10203:137:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18898,
                  "nodeType": "ExpressionStatement",
                  "src": "10203:137:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18899,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18881,
                          "src": "10350:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18902,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "10350:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18903,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "earningsRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28695,
                      "src": "10350:29:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18904,
                      "name": "earningsRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18883,
                      "src": "10382:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "10350:44:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 18906,
                  "nodeType": "ExpressionStatement",
                  "src": "10350:44:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18908,
                        "name": "earningsRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18883,
                        "src": "10428:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18907,
                      "name": "LogSetEarningsRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18313,
                      "src": "10409:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10409:32:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18910,
                  "nodeType": "EmitStatement",
                  "src": "10404:37:68"
                }
              ]
            },
            "documentation": null,
            "id": 18912,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetEarningsRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18881,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18912,
                  "src": "10102:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18880,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "10102:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18883,
                  "name": "earningsRate",
                  "nodeType": "VariableDeclaration",
                  "scope": 18912,
                  "src": "10139:32:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18882,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "10139:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10092:85:68"
            },
            "returnParameters": {
              "id": 18885,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10193:0:68"
            },
            "scope": 19547,
            "src": "10063:385:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18944,
              "nodeType": "Block",
              "src": "10594:280:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18927,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18922,
                            "name": "minBorrowedValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18916,
                            "src": "10630:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                              "typeString": "struct Monetary.Value memory"
                            }
                          },
                          "id": 18923,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27758,
                          "src": "10630:22:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18924,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18914,
                              "src": "10656:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 18925,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "10656:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 18926,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "minBorrowedValueMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28724,
                          "src": "10656:36:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "src": "10630:62:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18928,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "10706:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56616c756520746f6f2068696768",
                        "id": 18929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10724:16:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5235fb147686bcfd3bfd0ea602d4be817fe6da64631d8dc1e0d64e02da6f14bb",
                          "typeString": "literal_string \"Value too high\""
                        },
                        "value": "Value too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5235fb147686bcfd3bfd0ea602d4be817fe6da64631d8dc1e0d64e02da6f14bb",
                          "typeString": "literal_string \"Value too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18919,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "10604:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "10604:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10604:146:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18931,
                  "nodeType": "ExpressionStatement",
                  "src": "10604:146:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18932,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18914,
                          "src": "10760:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18935,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "10760:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18936,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "minBorrowedValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28697,
                      "src": "10760:33:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Value_$27759_storage",
                        "typeString": "struct Monetary.Value storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18937,
                      "name": "minBorrowedValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18916,
                      "src": "10796:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                        "typeString": "struct Monetary.Value memory"
                      }
                    },
                    "src": "10760:52:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage",
                      "typeString": "struct Monetary.Value storage ref"
                    }
                  },
                  "id": 18939,
                  "nodeType": "ExpressionStatement",
                  "src": "10760:52:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18941,
                        "name": "minBorrowedValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18916,
                        "src": "10850:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                          "typeString": "struct Monetary.Value memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                          "typeString": "struct Monetary.Value memory"
                        }
                      ],
                      "id": 18940,
                      "name": "LogSetMinBorrowedValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18317,
                      "src": "10827:22:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_Value_$27759_memory_ptr_$returns$__$",
                        "typeString": "function (struct Monetary.Value memory)"
                      }
                    },
                    "id": 18942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10827:40:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18943,
                  "nodeType": "EmitStatement",
                  "src": "10822:45:68"
                }
              ]
            },
            "documentation": null,
            "id": 18945,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMinBorrowedValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18914,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18945,
                  "src": "10497:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18913,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "10497:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18916,
                  "name": "minBorrowedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 18945,
                  "src": "10534:38:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18915,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "10534:14:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10487:91:68"
            },
            "returnParameters": {
              "id": 18918,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10594:0:68"
            },
            "scope": 19547,
            "src": "10454:420:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18984,
              "nodeType": "Block",
              "src": "11040:512:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18955,
                          "name": "accountMaxNumberOfMarketsWithBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18949,
                          "src": "11076:37:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 18956,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11117:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "src": "11076:42:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18958,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "11132:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6178206e756d626572206f66206d61726b65747320746f6f206c6f77",
                        "id": 18959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11150:31:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cb237a0b88f2b387ddc604e054a4672a0d91a39d777de2cb862a3075892cff9d",
                          "typeString": "literal_string \"Max number of markets too low\""
                        },
                        "value": "Max number of markets too low"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cb237a0b88f2b387ddc604e054a4672a0d91a39d777de2cb862a3075892cff9d",
                          "typeString": "literal_string \"Max number of markets too low\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18952,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "11050:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "11050:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11050:141:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18961,
                  "nodeType": "ExpressionStatement",
                  "src": "11050:141:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18965,
                          "name": "accountMaxNumberOfMarketsWithBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18949,
                          "src": "11227:37:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3634",
                          "id": 18966,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11268:2:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_64_by_1",
                            "typeString": "int_const 64"
                          },
                          "value": "64"
                        },
                        "src": "11227:43:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18968,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "11284:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6178206e756d626572206f66206d61726b65747320746f6f2068696768",
                        "id": 18969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11302:32:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4fc380cd7e82b8edc861591f2b98e4ea3a1815466b600cf1cb84990b3d50327a",
                          "typeString": "literal_string \"Max number of markets too high\""
                        },
                        "value": "Max number of markets too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4fc380cd7e82b8edc861591f2b98e4ea3a1815466b600cf1cb84990b3d50327a",
                          "typeString": "literal_string \"Max number of markets too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18962,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "11201:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "11201:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11201:143:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18971,
                  "nodeType": "ExpressionStatement",
                  "src": "11201:143:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18972,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18947,
                          "src": "11354:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18975,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "11354:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18976,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "accountMaxNumberOfMarketsWithBalances",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28699,
                      "src": "11354:54:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18977,
                      "name": "accountMaxNumberOfMarketsWithBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18949,
                      "src": "11411:37:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11354:94:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18979,
                  "nodeType": "ExpressionStatement",
                  "src": "11354:94:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18981,
                        "name": "accountMaxNumberOfMarketsWithBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18949,
                        "src": "11507:37:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18980,
                      "name": "LogSetAccountMaxNumberOfMarketsWithBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18321,
                      "src": "11463:43:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 18982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11463:82:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18983,
                  "nodeType": "EmitStatement",
                  "src": "11458:87:68"
                }
              ]
            },
            "documentation": null,
            "id": 18985,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAccountMaxNumberOfMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18947,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18985,
                  "src": "10944:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18946,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "10944:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18949,
                  "name": "accountMaxNumberOfMarketsWithBalances",
                  "nodeType": "VariableDeclaration",
                  "scope": 18985,
                  "src": "10981:45:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18948,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10981:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10934:98:68"
            },
            "returnParameters": {
              "id": 18951,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11040:0:68"
            },
            "scope": 19547,
            "src": "10880:672:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19018,
              "nodeType": "Block",
              "src": "11680:292:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 19001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 18995,
                              "name": "oracleSentinel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18989,
                              "src": "11716:14:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                                "typeString": "contract IOracleSentinel"
                              }
                            },
                            "id": 18996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isBorrowAllowed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24806,
                            "src": "11716:30:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 18997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11716:32:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 18998,
                              "name": "oracleSentinel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18989,
                              "src": "11752:14:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                                "typeString": "contract IOracleSentinel"
                              }
                            },
                            "id": 18999,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isLiquidationAllowed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24811,
                            "src": "11752:35:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 19000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11752:37:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11716:73:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19002,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "11803:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206f7261636c652073656e74696e656c",
                        "id": 19003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11821:25:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1f898f5c255ec0421a6103f0738583b1a31386e69a77b177650e8c4c23c9bc0b",
                          "typeString": "literal_string \"Invalid oracle sentinel\""
                        },
                        "value": "Invalid oracle sentinel"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1f898f5c255ec0421a6103f0738583b1a31386e69a77b177650e8c4c23c9bc0b",
                          "typeString": "literal_string \"Invalid oracle sentinel\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18992,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "11690:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "11690:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11690:166:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19005,
                  "nodeType": "ExpressionStatement",
                  "src": "11690:166:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19012,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19006,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18987,
                          "src": "11866:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19009,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "11866:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 19010,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "oracleSentinel",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28701,
                      "src": "11866:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                        "typeString": "contract IOracleSentinel"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19011,
                      "name": "oracleSentinel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18989,
                      "src": "11900:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                        "typeString": "contract IOracleSentinel"
                      }
                    },
                    "src": "11866:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "id": 19013,
                  "nodeType": "ExpressionStatement",
                  "src": "11866:48:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19015,
                        "name": "oracleSentinel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18989,
                        "src": "11950:14:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                          "typeString": "contract IOracleSentinel"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                          "typeString": "contract IOracleSentinel"
                        }
                      ],
                      "id": 19014,
                      "name": "LogSetOracleSentinel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18325,
                      "src": "11929:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IOracleSentinel_$24817_$returns$__$",
                        "typeString": "function (contract IOracleSentinel)"
                      }
                    },
                    "id": 19016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11929:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19017,
                  "nodeType": "EmitStatement",
                  "src": "11924:41:68"
                }
              ]
            },
            "documentation": null,
            "id": 19019,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetOracleSentinel",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18987,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19019,
                  "src": "11599:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18986,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "11599:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18989,
                  "name": "oracleSentinel",
                  "nodeType": "VariableDeclaration",
                  "scope": 19019,
                  "src": "11636:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                    "typeString": "contract IOracleSentinel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18988,
                    "name": "IOracleSentinel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24817,
                    "src": "11636:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11589:83:68"
            },
            "returnParameters": {
              "id": 18991,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11680:0:68"
            },
            "scope": 19547,
            "src": "11558:414:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19038,
              "nodeType": "Block",
              "src": "12096:485:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19026,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19021,
                          "src": "12467:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19029,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "12467:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 19030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "callbackGasLimit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28703,
                      "src": "12467:33:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19031,
                      "name": "callbackGasLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19023,
                      "src": "12503:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12467:52:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19033,
                  "nodeType": "ExpressionStatement",
                  "src": "12467:52:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19035,
                        "name": "callbackGasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19023,
                        "src": "12557:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19034,
                      "name": "LogSetCallbackGasLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18329,
                      "src": "12534:22:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 19036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12534:40:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19037,
                  "nodeType": "EmitStatement",
                  "src": "12529:45:68"
                }
              ]
            },
            "documentation": null,
            "id": 19039,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetCallbackGasLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19024,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19021,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19039,
                  "src": "12021:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19020,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "12021:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19023,
                  "name": "callbackGasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 19039,
                  "src": "12058:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19022,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12058:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12011:77:68"
            },
            "returnParameters": {
              "id": 19025,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12096:0:68"
            },
            "scope": 19547,
            "src": "11978:603:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19088,
              "nodeType": "Block",
              "src": "12750:577:68",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 19052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 19047,
                          "name": "defaultAccountRiskOverrideSetter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19043,
                          "src": "12772:32:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                            "typeString": "contract IAccountRiskOverrideSetter"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                            "typeString": "contract IAccountRiskOverrideSetter"
                          }
                        ],
                        "id": 19046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "12764:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 19048,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12764:41:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 19050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12817:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 19049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "12809:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 19051,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12809:10:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "12764:55:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 19075,
                  "nodeType": "IfStatement",
                  "src": "12760:379:68",
                  "trueBody": {
                    "id": 19074,
                    "nodeType": "Block",
                    "src": "12821:318:68",
                    "statements": [
                      {
                        "assignments": [
                          19056,
                          19058
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 19056,
                            "name": "marginRatio",
                            "nodeType": "VariableDeclaration",
                            "scope": 19074,
                            "src": "12853:31:68",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 19055,
                              "name": "Decimal.D256",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 25950,
                              "src": "12853:12:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                                "typeString": "struct Decimal.D256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 19058,
                            "name": "liquidationSpread",
                            "nodeType": "VariableDeclaration",
                            "scope": 19074,
                            "src": "12902:37:68",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 19057,
                              "name": "Decimal.D256",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 25950,
                              "src": "12902:12:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                                "typeString": "struct Decimal.D256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 19066,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19062,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 38107,
                                    "src": "13031:3:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 19063,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13031:10:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 19061,
                                "name": "_getDefaultAccount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19546,
                                "src": "13012:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_struct$_Info_$24851_memory_ptr_$",
                                  "typeString": "function (address) pure returns (struct Account.Info memory)"
                                }
                              },
                              "id": 19064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13012:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                                "typeString": "struct Account.Info memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                                "typeString": "struct Account.Info memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19059,
                              "name": "defaultAccountRiskOverrideSetter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19043,
                              "src": "12956:32:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                                "typeString": "contract IAccountRiskOverrideSetter"
                              }
                            },
                            "id": 19060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAccountRiskOverride",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24028,
                            "src": "12956:55:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_struct$_Info_$24851_memory_ptr_$returns$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$",
                              "typeString": "function (struct Account.Info memory) view external returns (struct Decimal.D256 memory,struct Decimal.D256 memory)"
                            }
                          },
                          "id": 19065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12956:87:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$",
                            "typeString": "tuple(struct Decimal.D256 memory,struct Decimal.D256 memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12835:208:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19070,
                              "name": "marginRatio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19056,
                              "src": "13097:11:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 19071,
                              "name": "liquidationSpread",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19058,
                              "src": "13110:17:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19067,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19041,
                              "src": "13057:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19069,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "validateAccountRiskOverrideValues",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 30211,
                            "src": "13057:39:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$returns$__$bound_to$_t_struct$_State_$28760_storage_ptr_$",
                              "typeString": "function (struct Storage.State storage pointer,struct Decimal.D256 memory,struct Decimal.D256 memory) view"
                            }
                          },
                          "id": 19072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13057:71:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 19073,
                        "nodeType": "ExpressionStatement",
                        "src": "13057:71:68"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19076,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19041,
                          "src": "13149:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19079,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "13149:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 19080,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "defaultAccountRiskOverrideSetter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28705,
                      "src": "13149:49:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                        "typeString": "contract IAccountRiskOverrideSetter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19081,
                      "name": "defaultAccountRiskOverrideSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19043,
                      "src": "13201:32:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                        "typeString": "contract IAccountRiskOverrideSetter"
                      }
                    },
                    "src": "13149:84:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "id": 19083,
                  "nodeType": "ExpressionStatement",
                  "src": "13149:84:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19085,
                        "name": "defaultAccountRiskOverrideSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19043,
                        "src": "13287:32:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                          "typeString": "contract IAccountRiskOverrideSetter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                          "typeString": "contract IAccountRiskOverrideSetter"
                        }
                      ],
                      "id": 19084,
                      "name": "LogSetDefaultAccountRiskOverrideSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18333,
                      "src": "13248:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IAccountRiskOverrideSetter_$24029_$returns$__$",
                        "typeString": "function (contract IAccountRiskOverrideSetter)"
                      }
                    },
                    "id": 19086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13248:72:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19087,
                  "nodeType": "EmitStatement",
                  "src": "13243:77:68"
                }
              ]
            },
            "documentation": null,
            "id": 19089,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetDefaultAccountRiskOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19041,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19089,
                  "src": "12640:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19040,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "12640:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19043,
                  "name": "defaultAccountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 19089,
                  "src": "12677:59:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19042,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "12677:26:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12630:112:68"
            },
            "returnParameters": {
              "id": 19045,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12750:0:68"
            },
            "scope": 19547,
            "src": "12587:740:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19142,
              "nodeType": "Block",
              "src": "13512:568:68",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 19104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 19099,
                          "name": "accountRiskOverrideSetter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19095,
                          "src": "13534:25:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                            "typeString": "contract IAccountRiskOverrideSetter"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                            "typeString": "contract IAccountRiskOverrideSetter"
                          }
                        ],
                        "id": 19098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13526:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 19100,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13526:34:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 19102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13572:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 19101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13564:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 19103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13564:10:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "13526:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 19126,
                  "nodeType": "IfStatement",
                  "src": "13522:367:68",
                  "trueBody": {
                    "id": 19125,
                    "nodeType": "Block",
                    "src": "13576:313:68",
                    "statements": [
                      {
                        "assignments": [
                          19108,
                          19110
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 19108,
                            "name": "marginRatio",
                            "nodeType": "VariableDeclaration",
                            "scope": 19125,
                            "src": "13608:31:68",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 19107,
                              "name": "Decimal.D256",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 25950,
                              "src": "13608:12:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                                "typeString": "struct Decimal.D256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 19110,
                            "name": "liquidationSpread",
                            "nodeType": "VariableDeclaration",
                            "scope": 19125,
                            "src": "13657:37:68",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 19109,
                              "name": "Decimal.D256",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 25950,
                              "src": "13657:12:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                                "typeString": "struct Decimal.D256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 19117,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 19114,
                                  "name": "accountOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19093,
                                  "src": "13779:12:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 19113,
                                "name": "_getDefaultAccount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19546,
                                "src": "13760:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_struct$_Info_$24851_memory_ptr_$",
                                  "typeString": "function (address) pure returns (struct Account.Info memory)"
                                }
                              },
                              "id": 19115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13760:32:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                                "typeString": "struct Account.Info memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                                "typeString": "struct Account.Info memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19111,
                              "name": "accountRiskOverrideSetter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19095,
                              "src": "13711:25:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                                "typeString": "contract IAccountRiskOverrideSetter"
                              }
                            },
                            "id": 19112,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAccountRiskOverride",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24028,
                            "src": "13711:48:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_struct$_Info_$24851_memory_ptr_$returns$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$",
                              "typeString": "function (struct Account.Info memory) view external returns (struct Decimal.D256 memory,struct Decimal.D256 memory)"
                            }
                          },
                          "id": 19116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13711:82:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$",
                            "typeString": "tuple(struct Decimal.D256 memory,struct Decimal.D256 memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13590:203:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19121,
                              "name": "marginRatio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19108,
                              "src": "13847:11:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 19122,
                              "name": "liquidationSpread",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19110,
                              "src": "13860:17:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19118,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19091,
                              "src": "13807:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19120,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "validateAccountRiskOverrideValues",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 30211,
                            "src": "13807:39:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$returns$__$bound_to$_t_struct$_State_$28760_storage_ptr_$",
                              "typeString": "function (struct Storage.State storage pointer,struct Decimal.D256 memory,struct Decimal.D256 memory) view"
                            }
                          },
                          "id": 19123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13807:71:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 19124,
                        "nodeType": "ExpressionStatement",
                        "src": "13807:71:68"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19127,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19091,
                            "src": "13899:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19131,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "riskParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28757,
                          "src": "13899:16:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                            "typeString": "struct Storage.RiskParams storage ref"
                          }
                        },
                        "id": 19132,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accountRiskOverrideSetterMap",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28709,
                        "src": "13899:45:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_contract$_IAccountRiskOverrideSetter_$24029_$",
                          "typeString": "mapping(address => contract IAccountRiskOverrideSetter)"
                        }
                      },
                      "id": 19133,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19130,
                        "name": "accountOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19093,
                        "src": "13945:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13899:59:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                        "typeString": "contract IAccountRiskOverrideSetter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19134,
                      "name": "accountRiskOverrideSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19095,
                      "src": "13961:25:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                        "typeString": "contract IAccountRiskOverrideSetter"
                      }
                    },
                    "src": "13899:87:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "id": 19136,
                  "nodeType": "ExpressionStatement",
                  "src": "13899:87:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19138,
                        "name": "accountOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19093,
                        "src": "14033:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19139,
                        "name": "accountRiskOverrideSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19095,
                        "src": "14047:25:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                          "typeString": "contract IAccountRiskOverrideSetter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                          "typeString": "contract IAccountRiskOverrideSetter"
                        }
                      ],
                      "id": 19137,
                      "name": "LogSetAccountRiskOverrideSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18339,
                      "src": "14001:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IAccountRiskOverrideSetter_$24029_$returns$__$",
                        "typeString": "function (address,contract IAccountRiskOverrideSetter)"
                      }
                    },
                    "id": 19140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14001:72:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19141,
                  "nodeType": "EmitStatement",
                  "src": "13996:77:68"
                }
              ]
            },
            "documentation": null,
            "id": 19143,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAccountRiskOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19091,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19143,
                  "src": "13379:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19090,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "13379:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19093,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 19143,
                  "src": "13416:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19092,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13416:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19095,
                  "name": "accountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 19143,
                  "src": "13446:52:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19094,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "13446:26:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13369:135:68"
            },
            "returnParameters": {
              "id": 19097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13512:0:68"
            },
            "scope": 19547,
            "src": "13333:747:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19168,
              "nodeType": "Block",
              "src": "14285:123:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19152,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19145,
                          "src": "14295:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19155,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "globalOperators",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28751,
                        "src": "14295:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 19156,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19154,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19147,
                        "src": "14317:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14295:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "id": 19157,
                        "name": "approved",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19149,
                        "src": "14329:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 19159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14344:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "id": 19160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "14329:16:68",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 19158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14340:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14295:50:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19162,
                  "nodeType": "ExpressionStatement",
                  "src": "14295:50:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19164,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19147,
                        "src": "14382:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19165,
                        "name": "approved",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19149,
                        "src": "14392:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19163,
                      "name": "LogSetGlobalOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18345,
                      "src": "14361:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 19166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14361:40:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19167,
                  "nodeType": "EmitStatement",
                  "src": "14356:45:68"
                }
              ]
            },
            "documentation": null,
            "id": 19169,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetGlobalOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19145,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19169,
                  "src": "14187:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19144,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "14187:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19147,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 19169,
                  "src": "14224:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19146,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14224:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19149,
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 19169,
                  "src": "14250:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19148,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14250:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14177:92:68"
            },
            "returnParameters": {
              "id": 19151,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14285:0:68"
            },
            "scope": 19547,
            "src": "14146:262:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19194,
              "nodeType": "Block",
              "src": "14559:137:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19178,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19171,
                          "src": "14569:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19181,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "specialAutoTraders",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28755,
                        "src": "14569:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 19182,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19180,
                        "name": "autoTrader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19173,
                        "src": "14594:10:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14569:36:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "id": 19183,
                        "name": "isSpecial",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19175,
                        "src": "14608:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 19185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14624:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "id": 19186,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "14608:17:68",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 19184,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14620:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14569:56:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19188,
                  "nodeType": "ExpressionStatement",
                  "src": "14569:56:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19190,
                        "name": "autoTrader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19173,
                        "src": "14667:10:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19191,
                        "name": "isSpecial",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19175,
                        "src": "14679:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19189,
                      "name": "LogSetAutoTraderIsSpecial",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18351,
                      "src": "14641:25:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 19192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14641:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19193,
                  "nodeType": "EmitStatement",
                  "src": "14636:53:68"
                }
              ]
            },
            "documentation": null,
            "id": 19195,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAutoTraderSpecial",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19171,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "14458:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19170,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "14458:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19173,
                  "name": "autoTrader",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "14495:18:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19172,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14495:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19175,
                  "name": "isSpecial",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "14523:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19174,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14523:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14448:95:68"
            },
            "returnParameters": {
              "id": 19177,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14559:0:68"
            },
            "scope": 19547,
            "src": "14414:282:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19242,
              "nodeType": "Block",
              "src": "14898:378:68",
              "statements": [
                {
                  "assignments": [
                    19205
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19205,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 19242,
                      "src": "14960:13:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 19204,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "14960:7:68",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19211,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19206,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19197,
                          "src": "14976:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19207,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "markets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28731,
                        "src": "14976:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                          "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                        }
                      },
                      "id": 19209,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19208,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19199,
                        "src": "14990:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14976:23:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Market_$28689_storage",
                        "typeString": "struct Storage.Market storage ref"
                      }
                    },
                    "id": 19210,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "token",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28668,
                    "src": "14976:29:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14960:45:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19221,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 19217,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19205,
                                "src": "15063:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 19215,
                                "name": "priceOracle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19201,
                                "src": "15042:11:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                                  "typeString": "contract IPriceOracle"
                                }
                              },
                              "id": 19216,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getPrice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24834,
                              "src": "15042:20:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_Price_$27756_memory_ptr_$",
                                "typeString": "function (address) view external returns (struct Monetary.Price memory)"
                              }
                            },
                            "id": 19218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15042:27:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Price_$27756_memory_ptr",
                              "typeString": "struct Monetary.Price memory"
                            }
                          },
                          "id": 19219,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27755,
                          "src": "15042:33:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 19220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15079:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "15042:38:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19222,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "15094:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206f7261636c65207072696365",
                        "id": 19223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15112:22:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b378524dde2c7c3f396f7d9c2e181f68f1bf2cb21a1d3c52e9c9a92f2c874265",
                          "typeString": "literal_string \"Invalid oracle price\""
                        },
                        "value": "Invalid oracle price"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b378524dde2c7c3f396f7d9c2e181f68f1bf2cb21a1d3c52e9c9a92f2c874265",
                          "typeString": "literal_string \"Invalid oracle price\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19212,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "15016:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "15016:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15016:128:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19225,
                  "nodeType": "ExpressionStatement",
                  "src": "15016:128:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19226,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19197,
                            "src": "15155:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19229,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "15155:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19230,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19228,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19199,
                          "src": "15169:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "15155:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19231,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "priceOracle",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28676,
                      "src": "15155:35:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                        "typeString": "contract IPriceOracle"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19232,
                      "name": "priceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19201,
                      "src": "15193:11:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                        "typeString": "contract IPriceOracle"
                      }
                    },
                    "src": "15155:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "id": 19234,
                  "nodeType": "ExpressionStatement",
                  "src": "15155:49:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19236,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19199,
                        "src": "15238:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19238,
                            "name": "priceOracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19201,
                            "src": "15256:11:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                              "typeString": "contract IPriceOracle"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                              "typeString": "contract IPriceOracle"
                            }
                          ],
                          "id": 19237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15248:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15248:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 19235,
                      "name": "LogSetPriceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18265,
                      "src": "15220:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 19240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15220:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19241,
                  "nodeType": "EmitStatement",
                  "src": "15215:54:68"
                }
              ]
            },
            "documentation": null,
            "id": 19243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setPriceOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19197,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19243,
                  "src": "14788:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19196,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "14788:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19199,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19243,
                  "src": "14825:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14825:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19201,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 19243,
                  "src": "14851:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19200,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "14851:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14778:103:68"
            },
            "returnParameters": {
              "id": 19203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14898:0:68"
            },
            "scope": 19547,
            "src": "14754:522:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19284,
              "nodeType": "Block",
              "src": "15435:322:68",
              "statements": [
                {
                  "assignments": [
                    19253
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19253,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 19284,
                      "src": "15515:13:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 19252,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15515:7:68",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19259,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19254,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19245,
                          "src": "15531:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19255,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "markets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28731,
                        "src": "15531:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                          "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                        }
                      },
                      "id": 19257,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19256,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19247,
                        "src": "15545:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "15531:23:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Market_$28689_storage",
                        "typeString": "struct Storage.Market storage ref"
                      }
                    },
                    "id": 19258,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "token",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28668,
                    "src": "15531:29:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15515:45:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19263,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19253,
                        "src": "15601:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15608:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15611:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19260,
                        "name": "interestSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19249,
                        "src": "15570:14:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      },
                      "id": 19262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getInterestRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24788,
                      "src": "15570:30:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_uint256_$returns$_t_struct$_Rate_$27464_memory_ptr_$",
                        "typeString": "function (address,uint256,uint256) view external returns (struct Interest.Rate memory)"
                      }
                    },
                    "id": 19266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15570:43:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                      "typeString": "struct Interest.Rate memory"
                    }
                  },
                  "id": 19267,
                  "nodeType": "ExpressionStatement",
                  "src": "15570:43:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19268,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19245,
                            "src": "15624:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19271,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "15624:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19272,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19270,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19247,
                          "src": "15638:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "15624:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19273,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interestSetter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28678,
                      "src": "15624:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                        "typeString": "contract IInterestSetter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19274,
                      "name": "interestSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19249,
                      "src": "15665:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                        "typeString": "contract IInterestSetter"
                      }
                    },
                    "src": "15624:55:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "id": 19276,
                  "nodeType": "ExpressionStatement",
                  "src": "15624:55:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19278,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19247,
                        "src": "15716:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19280,
                            "name": "interestSetter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19249,
                            "src": "15734:14:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                              "typeString": "contract IInterestSetter"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                              "typeString": "contract IInterestSetter"
                            }
                          ],
                          "id": 19279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15726:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19281,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15726:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 19277,
                      "name": "LogSetInterestSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18271,
                      "src": "15695:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 19282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15695:55:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19283,
                  "nodeType": "EmitStatement",
                  "src": "15690:60:68"
                }
              ]
            },
            "documentation": null,
            "id": 19285,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setInterestSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19245,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19285,
                  "src": "15319:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19244,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "15319:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19247,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19285,
                  "src": "15356:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19246,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15356:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19249,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 19285,
                  "src": "15382:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19248,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "15382:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15309:109:68"
            },
            "returnParameters": {
              "id": 19251,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15435:0:68"
            },
            "scope": 19547,
            "src": "15282:475:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19321,
              "nodeType": "Block",
              "src": "15918:289:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19297,
                            "name": "marginPremium",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19291,
                            "src": "15954:13:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 19298,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "15954:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19299,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19287,
                              "src": "15977:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19300,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "15977:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 19301,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "marginPremiumMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28718,
                          "src": "15977:33:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "15954:56:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19303,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "16024:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d617267696e207072656d69756d20746f6f2068696768",
                        "id": 19304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16042:25:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0bb8cd903cf0e5f9edbcc0eaec5686d956850ea08141803ab44ec7bc766ee9eb",
                          "typeString": "literal_string \"Margin premium too high\""
                        },
                        "value": "Margin premium too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0bb8cd903cf0e5f9edbcc0eaec5686d956850ea08141803ab44ec7bc766ee9eb",
                          "typeString": "literal_string \"Margin premium too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19294,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "15928:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "15928:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15928:149:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19306,
                  "nodeType": "ExpressionStatement",
                  "src": "15928:149:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19307,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19287,
                            "src": "16087:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19310,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "16087:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19311,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19309,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19289,
                          "src": "16101:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16087:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19312,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "marginPremium",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28680,
                      "src": "16087:37:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19313,
                      "name": "marginPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19291,
                      "src": "16127:13:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "16087:53:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 19315,
                  "nodeType": "ExpressionStatement",
                  "src": "16087:53:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19317,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19289,
                        "src": "16176:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19318,
                        "name": "marginPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19291,
                        "src": "16186:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 19316,
                      "name": "LogSetMarginPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18277,
                      "src": "16156:19:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 19319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16156:44:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19320,
                  "nodeType": "EmitStatement",
                  "src": "16151:49:68"
                }
              ]
            },
            "documentation": null,
            "id": 19322,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setMarginPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19287,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19322,
                  "src": "15799:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19286,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "15799:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19289,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19322,
                  "src": "15836:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15836:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19291,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 19322,
                  "src": "15862:33:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19290,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "15862:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15789:112:68"
            },
            "returnParameters": {
              "id": 19293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15918:0:68"
            },
            "scope": 19547,
            "src": "15763:444:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19358,
              "nodeType": "Block",
              "src": "16390:355:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19334,
                            "name": "liquidationSpreadPremium",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19328,
                            "src": "16426:24:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 19335,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "16426:30:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19336,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19324,
                              "src": "16460:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19337,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "16460:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 19338,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "liquidationSpreadPremiumMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28720,
                          "src": "16460:44:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "16426:78:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19340,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "16518:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537072656164207072656d69756d20746f6f2068696768",
                        "id": 19341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16536:25:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_973220e11bf34d56bfcbd63043d4fbfcb6fe864cca21f6e2a5ef17801337466d",
                          "typeString": "literal_string \"Spread premium too high\""
                        },
                        "value": "Spread premium too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_973220e11bf34d56bfcbd63043d4fbfcb6fe864cca21f6e2a5ef17801337466d",
                          "typeString": "literal_string \"Spread premium too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19331,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "16400:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "16400:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16400:171:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19343,
                  "nodeType": "ExpressionStatement",
                  "src": "16400:171:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19344,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19324,
                            "src": "16581:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19347,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "16581:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19348,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19346,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19326,
                          "src": "16595:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16581:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19349,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "liquidationSpreadPremium",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28682,
                      "src": "16581:48:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19350,
                      "name": "liquidationSpreadPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19328,
                      "src": "16632:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "16581:75:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 19352,
                  "nodeType": "ExpressionStatement",
                  "src": "16581:75:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19354,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19326,
                        "src": "16703:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19355,
                        "name": "liquidationSpreadPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19328,
                        "src": "16713:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 19353,
                      "name": "LogSetLiquidationSpreadPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18283,
                      "src": "16672:30:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 19356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16672:66:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19357,
                  "nodeType": "EmitStatement",
                  "src": "16667:71:68"
                }
              ]
            },
            "documentation": null,
            "id": 19359,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setLiquidationSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19324,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19359,
                  "src": "16260:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19323,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "16260:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19326,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19359,
                  "src": "16297:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19325,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16297:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19328,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 19359,
                  "src": "16323:44:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19327,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "16323:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16250:123:68"
            },
            "returnParameters": {
              "id": 19330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16390:0:68"
            },
            "scope": 19547,
            "src": "16213:532:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19394,
              "nodeType": "Block",
              "src": "16892:223:68",
              "statements": [
                {
                  "assignments": [
                    19371
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19371,
                      "name": "maxSupplyWeiStruct",
                      "nodeType": "VariableDeclaration",
                      "scope": 19394,
                      "src": "16902:35:68",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 19370,
                        "name": "Types.Wei",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 31149,
                        "src": "16902:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                          "typeString": "struct Types.Wei"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19379,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 19374,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16950:4:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 19375,
                            "name": "maxSupplyWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19365,
                            "src": "16956:12:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 19376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "to128",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26183,
                          "src": "16956:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint128)"
                          }
                        },
                        "id": 19377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16956:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19372,
                        "name": "Types",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31361,
                        "src": "16940:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Types_$31361_$",
                          "typeString": "type(library Types)"
                        }
                      },
                      "id": 19373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Wei",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31149,
                      "src": "16940:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Wei_$31149_storage_ptr_$",
                        "typeString": "type(struct Types.Wei storage pointer)"
                      }
                    },
                    "id": 19378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16940:37:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_memory",
                      "typeString": "struct Types.Wei memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16902:75:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19380,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19361,
                            "src": "16987:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19383,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "16987:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19384,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19382,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19363,
                          "src": "17001:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16987:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19385,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maxSupplyWei",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28684,
                      "src": "16987:36:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_storage",
                        "typeString": "struct Types.Wei storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19386,
                      "name": "maxSupplyWeiStruct",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19371,
                      "src": "17026:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei memory"
                      }
                    },
                    "src": "16987:57:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage",
                      "typeString": "struct Types.Wei storage ref"
                    }
                  },
                  "id": 19388,
                  "nodeType": "ExpressionStatement",
                  "src": "16987:57:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19390,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19363,
                        "src": "17079:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19391,
                        "name": "maxSupplyWeiStruct",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19371,
                        "src": "17089:18:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      ],
                      "id": 19389,
                      "name": "LogSetMaxSupplyWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18289,
                      "src": "17060:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_Wei_$31149_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Types.Wei memory)"
                      }
                    },
                    "id": 19392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17060:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19393,
                  "nodeType": "EmitStatement",
                  "src": "17055:53:68"
                }
              ]
            },
            "documentation": null,
            "id": 19395,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setMaxSupplyWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19361,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19395,
                  "src": "16786:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19360,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "16786:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19363,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19395,
                  "src": "16823:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19362,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16823:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19365,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 19395,
                  "src": "16849:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19364,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16849:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16776:99:68"
            },
            "returnParameters": {
              "id": 19367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16892:0:68"
            },
            "scope": 19547,
            "src": "16751:364:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19430,
              "nodeType": "Block",
              "src": "17262:224:68",
              "statements": [
                {
                  "assignments": [
                    19407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19407,
                      "name": "maxBorrowWeiStruct",
                      "nodeType": "VariableDeclaration",
                      "scope": 19430,
                      "src": "17272:35:68",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 19406,
                        "name": "Types.Wei",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 31149,
                        "src": "17272:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                          "typeString": "struct Types.Wei"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19415,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 19410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17320:5:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 19411,
                            "name": "maxBorrowWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19401,
                            "src": "17327:12:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 19412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "to128",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26183,
                          "src": "17327:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint128)"
                          }
                        },
                        "id": 19413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17327:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19408,
                        "name": "Types",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31361,
                        "src": "17310:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Types_$31361_$",
                          "typeString": "type(library Types)"
                        }
                      },
                      "id": 19409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Wei",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31149,
                      "src": "17310:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Wei_$31149_storage_ptr_$",
                        "typeString": "type(struct Types.Wei storage pointer)"
                      }
                    },
                    "id": 19414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17310:38:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_memory",
                      "typeString": "struct Types.Wei memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17272:76:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19416,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19397,
                            "src": "17358:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19419,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "17358:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19420,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19418,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19399,
                          "src": "17372:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17358:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19421,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maxBorrowWei",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28686,
                      "src": "17358:36:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_storage",
                        "typeString": "struct Types.Wei storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19422,
                      "name": "maxBorrowWeiStruct",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19407,
                      "src": "17397:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei memory"
                      }
                    },
                    "src": "17358:57:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage",
                      "typeString": "struct Types.Wei storage ref"
                    }
                  },
                  "id": 19424,
                  "nodeType": "ExpressionStatement",
                  "src": "17358:57:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19426,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19399,
                        "src": "17450:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19427,
                        "name": "maxBorrowWeiStruct",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19407,
                        "src": "17460:18:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      ],
                      "id": 19425,
                      "name": "LogSetMaxBorrowWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18295,
                      "src": "17431:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_Wei_$31149_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Types.Wei memory)"
                      }
                    },
                    "id": 19428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17431:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19429,
                  "nodeType": "EmitStatement",
                  "src": "17426:53:68"
                }
              ]
            },
            "documentation": null,
            "id": 19431,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setMaxBorrowWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19397,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19431,
                  "src": "17156:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19396,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "17156:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19399,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19431,
                  "src": "17193:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19398,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17193:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19401,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 19431,
                  "src": "17219:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17219:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17146:99:68"
            },
            "returnParameters": {
              "id": 19403,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17262:0:68"
            },
            "scope": 19547,
            "src": "17121:365:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19467,
              "nodeType": "Block",
              "src": "17661:332:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19448,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19443,
                            "name": "earningsRateOverride",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19437,
                            "src": "17697:20:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 19444,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "17697:26:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19445,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19433,
                              "src": "17727:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19446,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "17727:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 19447,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "earningsRateMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28716,
                          "src": "17727:32:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "17697:62:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19449,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "17773:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4561726e696e67732072617465206f7665727269646520746f6f2068696768",
                        "id": 19450,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17791:33:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cb20b3cc4ae4070f6ddc1a66b301773ce4a087051407649d194180a05cf7c38e",
                          "typeString": "literal_string \"Earnings rate override too high\""
                        },
                        "value": "Earnings rate override too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cb20b3cc4ae4070f6ddc1a66b301773ce4a087051407649d194180a05cf7c38e",
                          "typeString": "literal_string \"Earnings rate override too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19440,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "17671:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "17671:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17671:163:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19452,
                  "nodeType": "ExpressionStatement",
                  "src": "17671:163:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19453,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19433,
                            "src": "17845:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19456,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "17845:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19457,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19455,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19435,
                          "src": "17859:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17845:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19458,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "earningsRateOverride",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28688,
                      "src": "17845:44:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19459,
                      "name": "earningsRateOverride",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19437,
                      "src": "17892:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "17845:67:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 19461,
                  "nodeType": "ExpressionStatement",
                  "src": "17845:67:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19463,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19435,
                        "src": "17955:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19464,
                        "name": "earningsRateOverride",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19437,
                        "src": "17965:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 19462,
                      "name": "LogSetEarningsRateOverride",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18301,
                      "src": "17928:26:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 19465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17928:58:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19466,
                  "nodeType": "EmitStatement",
                  "src": "17923:63:68"
                }
              ]
            },
            "documentation": null,
            "id": 19468,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setEarningsRateOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19433,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19468,
                  "src": "17535:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19432,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "17535:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19435,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19468,
                  "src": "17572:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17572:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19437,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 19468,
                  "src": "17598:40:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19436,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "17598:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17525:119:68"
            },
            "returnParameters": {
              "id": 19439,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17661:0:68"
            },
            "scope": 19547,
            "src": "17492:501:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19501,
              "nodeType": "Block",
              "src": "18116:353:68",
              "statements": [
                {
                  "assignments": [
                    19476
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19476,
                      "name": "marketId",
                      "nodeType": "VariableDeclaration",
                      "scope": 19501,
                      "src": "18243:13:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 19475,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18243:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19481,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19477,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19470,
                        "src": "18259:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      "id": 19478,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenToMarketId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28735,
                      "src": "18259:21:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 19480,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 19479,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19472,
                      "src": "18281:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18259:28:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18243:44:68"
                },
                {
                  "assignments": [
                    19483
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19483,
                      "name": "marketExists",
                      "nodeType": "VariableDeclaration",
                      "scope": 19501,
                      "src": "18297:17:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 19482,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18297:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19491,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 19490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 19484,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19472,
                      "src": "18317:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19485,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19470,
                            "src": "18326:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19486,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "18326:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19488,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19487,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19476,
                          "src": "18340:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18326:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19489,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28668,
                      "src": "18326:29:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18317:38:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18297:58:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "18392:13:68",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 19495,
                          "name": "marketExists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19483,
                          "src": "18393:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19497,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "18419:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d61726b657420657869737473",
                        "id": 19498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18437:15:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1d34539bb0696c661cd97fc7bcf8e161469a11090ce0456f3b1449a1180896cf",
                          "typeString": "literal_string \"Market exists\""
                        },
                        "value": "Market exists"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1d34539bb0696c661cd97fc7bcf8e161469a11090ce0456f3b1449a1180896cf",
                          "typeString": "literal_string \"Market exists\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19492,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "18366:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "18366:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18366:96:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19500,
                  "nodeType": "ExpressionStatement",
                  "src": "18366:96:68"
                }
              ]
            },
            "documentation": null,
            "id": 19502,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_requireNoMarket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19470,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19502,
                  "src": "18034:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19469,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "18034:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19472,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 19502,
                  "src": "18071:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19471,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18071:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18024:66:68"
            },
            "returnParameters": {
              "id": 19474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18116:0:68"
            },
            "scope": 19547,
            "src": "17999:470:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19531,
              "nodeType": "Block",
              "src": "18596:197:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 19525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 19515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 19512,
                            "name": "marketId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19506,
                            "src": "18632:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19513,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19504,
                              "src": "18643:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19514,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "numMarkets",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28727,
                            "src": "18643:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18632:27:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 19524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19516,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19504,
                                  "src": "18663:5:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                    "typeString": "struct Storage.State storage pointer"
                                  }
                                },
                                "id": 19517,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "markets",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 28731,
                                "src": "18663:13:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                                  "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                                }
                              },
                              "id": 19519,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 19518,
                                "name": "marketId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19506,
                                "src": "18677:8:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "18663:23:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Market_$28689_storage",
                                "typeString": "struct Storage.Market storage ref"
                              }
                            },
                            "id": 19520,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "token",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28668,
                            "src": "18663:29:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 19522,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "18704:1:68",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 19521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18696:7:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 19523,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18696:10:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "18663:43:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "18632:74:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19526,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "18720:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206d61726b6574",
                        "id": 19527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18738:16:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_81e613bc1436d8cdfade9fbe523a11c66d5bc5d8dd94b93d7f736a1f9de2219f",
                          "typeString": "literal_string \"Invalid market\""
                        },
                        "value": "Invalid market"
                      },
                      {
                        "argumentTypes": null,
                        "id": 19528,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19506,
                        "src": "18768:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_81e613bc1436d8cdfade9fbe523a11c66d5bc5d8dd94b93d7f736a1f9de2219f",
                          "typeString": "literal_string \"Invalid market\""
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19509,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "18606:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27852,
                      "src": "18606:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32,uint256) pure"
                      }
                    },
                    "id": 19529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18606:180:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19530,
                  "nodeType": "ExpressionStatement",
                  "src": "18606:180:68"
                }
              ]
            },
            "documentation": null,
            "id": 19532,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validateMarketId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19504,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19532,
                  "src": "18511:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19503,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "18511:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19506,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19532,
                  "src": "18548:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19505,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18548:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18501:69:68"
            },
            "returnParameters": {
              "id": 19508,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18596:0:68"
            },
            "scope": 19547,
            "src": "18475:318:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19545,
              "nodeType": "Block",
              "src": "18923:105:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19541,
                        "name": "_accountOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19534,
                        "src": "18974:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19009:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19539,
                        "name": "Account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24885,
                        "src": "18940:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Account_$24885_$",
                          "typeString": "type(library Account)"
                        }
                      },
                      "id": 19540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Info",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24851,
                      "src": "18940:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Info_$24851_storage_ptr_$",
                        "typeString": "type(struct Account.Info storage pointer)"
                      }
                    },
                    "id": 19543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "owner",
                      "number"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "18940:81:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_memory",
                      "typeString": "struct Account.Info memory"
                    }
                  },
                  "functionReturnParameters": 19538,
                  "id": 19544,
                  "nodeType": "Return",
                  "src": "18933:88:68"
                }
              ]
            },
            "documentation": null,
            "id": 19546,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getDefaultAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19534,
                  "name": "_accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 19546,
                  "src": "18836:21:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19533,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18836:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18826:37:68"
            },
            "returnParameters": {
              "id": 19538,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19537,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19546,
                  "src": "18898:19:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19536,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "18898:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18897:21:68"
            },
            "scope": 19547,
            "src": "18799:229:68",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 19548,
        "src": "1630:17400:68"
      }
    ],
    "src": "603:18428:68"
  },
  "legacyAST": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/impl/AdminImpl.sol",
    "exportedSymbols": {
      "AdminImpl": [
        19547
      ]
    },
    "id": 19548,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18186,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".7"
        ],
        "nodeType": "PragmaDirective",
        "src": "603:23:68"
      },
      {
        "id": 18187,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "627:33:68"
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "id": 18189,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 37848,
        "src": "662:68:68",
        "symbolAliases": [
          {
            "foreign": 18188,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol",
        "file": "../interfaces/IERC20Detailed.sol",
        "id": 18191,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24716,
        "src": "732:66:68",
        "symbolAliases": [
          {
            "foreign": 18190,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol",
        "file": "../interfaces/IAccountRiskOverrideSetter.sol",
        "id": 18193,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24030,
        "src": "799:90:68",
        "symbolAliases": [
          {
            "foreign": 18192,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol",
        "file": "../interfaces/IInterestSetter.sol",
        "id": 18195,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24790,
        "src": "890:68:68",
        "symbolAliases": [
          {
            "foreign": 18194,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol",
        "file": "../interfaces/IOracleSentinel.sol",
        "id": 18197,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24818,
        "src": "959:68:68",
        "symbolAliases": [
          {
            "foreign": 18196,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol",
        "file": "../interfaces/IPriceOracle.sol",
        "id": 18199,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24836,
        "src": "1028:62:68",
        "symbolAliases": [
          {
            "foreign": 18198,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
        "file": "../lib/Account.sol",
        "id": 18201,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 24886,
        "src": "1092:45:68",
        "symbolAliases": [
          {
            "foreign": 18200,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol",
        "file": "../lib/Decimal.sol",
        "id": 18203,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 26024,
        "src": "1138:45:68",
        "symbolAliases": [
          {
            "foreign": 18202,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol",
        "file": "../lib/Interest.sol",
        "id": 18205,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 27751,
        "src": "1184:47:68",
        "symbolAliases": [
          {
            "foreign": 18204,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol",
        "file": "../lib/DolomiteMarginMath.sol",
        "id": 18207,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 26239,
        "src": "1232:67:68",
        "symbolAliases": [
          {
            "foreign": 18206,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol",
        "file": "../lib/Monetary.sol",
        "id": 18209,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 27761,
        "src": "1300:47:68",
        "symbolAliases": [
          {
            "foreign": 18208,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
        "file": "../lib/Require.sol",
        "id": 18211,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 28453,
        "src": "1348:45:68",
        "symbolAliases": [
          {
            "foreign": 18210,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol",
        "file": "../lib/Storage.sol",
        "id": 18213,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 30712,
        "src": "1394:45:68",
        "symbolAliases": [
          {
            "foreign": 18212,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Token.sol",
        "file": "../lib/Token.sol",
        "id": 18215,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 30851,
        "src": "1440:41:68",
        "symbolAliases": [
          {
            "foreign": 18214,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
        "file": "../lib/Types.sol",
        "id": 18217,
        "nodeType": "ImportDirective",
        "scope": 19548,
        "sourceUnit": 31362,
        "src": "1482:41:68",
        "symbolAliases": [
          {
            "foreign": 18216,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@title AdminImpl\n@author dYdX\n * Administrative functions to keep the protocol updated",
        "fullyImplemented": true,
        "id": 19547,
        "linearizedBaseContracts": [
          19547
        ],
        "name": "AdminImpl",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 18220,
            "libraryName": {
              "contractScope": null,
              "id": 18218,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 37847,
              "src": "1660:7:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$37847",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1654:26:68",
            "typeName": {
              "id": 18219,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1672:7:68",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 18223,
            "libraryName": {
              "contractScope": null,
              "id": 18221,
              "name": "DolomiteMarginMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26238,
              "src": "1691:18:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DolomiteMarginMath_$26238",
                "typeString": "library DolomiteMarginMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1685:37:68",
            "typeName": {
              "id": 18222,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1714:7:68",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 18226,
            "libraryName": {
              "contractScope": null,
              "id": 18224,
              "name": "Storage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30711,
              "src": "1733:7:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Storage_$30711",
                "typeString": "library Storage"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1727:32:68",
            "typeName": {
              "contractScope": null,
              "id": 18225,
              "name": "Storage.State",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28760,
              "src": "1745:13:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                "typeString": "struct Storage.State"
              }
            }
          },
          {
            "id": 18229,
            "libraryName": {
              "contractScope": null,
              "id": 18227,
              "name": "Token",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30850,
              "src": "1770:5:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Token_$30850",
                "typeString": "library Token"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1764:24:68",
            "typeName": {
              "id": 18228,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1780:7:68",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 18232,
            "libraryName": {
              "contractScope": null,
              "id": 18230,
              "name": "Types",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31361,
              "src": "1799:5:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Types_$31361",
                "typeString": "library Types"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1793:26:68",
            "typeName": {
              "contractScope": null,
              "id": 18231,
              "name": "Types.Wei",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31149,
              "src": "1809:9:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                "typeString": "struct Types.Wei"
              }
            }
          },
          {
            "constant": true,
            "id": 18235,
            "name": "FILE",
            "nodeType": "VariableDeclaration",
            "scope": 19547,
            "src": "1869:43:68",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 18233,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1869:7:68",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41646d696e496d706c",
              "id": 18234,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1901:11:68",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4b70a5e7c59e3d0b932d067bd46e7887c7f5c096c2fd4a9bfceb35c8e4308d36",
                "typeString": "literal_string \"AdminImpl\""
              },
              "value": "AdminImpl"
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18241,
            "name": "LogWithdrawExcessTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18240,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18237,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18241,
                  "src": "1999:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1999:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18239,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 18241,
                  "src": "2022:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18238,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2022:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1989:53:68"
            },
            "src": "1960:83:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18247,
            "name": "LogWithdrawUnsupportedTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18243,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18247,
                  "src": "2093:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2093:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18245,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 18247,
                  "src": "2116:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2083:53:68"
            },
            "src": "2049:88:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18253,
            "name": "LogAddMarket",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18249,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18253,
                  "src": "2171:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18248,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2171:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18251,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18253,
                  "src": "2197:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18250,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2197:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2161:55:68"
            },
            "src": "2143:74:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18259,
            "name": "LogSetIsClosing",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18258,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18255,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18259,
                  "src": "2254:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18254,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2254:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18257,
                  "indexed": false,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 18259,
                  "src": "2280:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18256,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2280:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2244:56:68"
            },
            "src": "2223:78:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18265,
            "name": "LogSetPriceOracle",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18261,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18265,
                  "src": "2340:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18260,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2340:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18263,
                  "indexed": false,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 18265,
                  "src": "2366:19:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18262,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2366:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2330:61:68"
            },
            "src": "2307:85:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18271,
            "name": "LogSetInterestSetter",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18267,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18271,
                  "src": "2434:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18266,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2434:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18269,
                  "indexed": false,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18271,
                  "src": "2460:22:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18268,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2460:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2424:64:68"
            },
            "src": "2398:91:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18277,
            "name": "LogSetMarginPremium",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18273,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18277,
                  "src": "2530:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18272,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2530:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18275,
                  "indexed": false,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18277,
                  "src": "2556:26:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18274,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2556:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2520:68:68"
            },
            "src": "2495:94:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18283,
            "name": "LogSetLiquidationSpreadPremium",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18282,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18279,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18283,
                  "src": "2641:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18278,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2641:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18281,
                  "indexed": false,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18283,
                  "src": "2667:37:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18280,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2667:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2631:79:68"
            },
            "src": "2595:116:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18289,
            "name": "LogSetMaxSupplyWei",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18285,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18289,
                  "src": "2751:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18284,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2751:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18287,
                  "indexed": false,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18289,
                  "src": "2777:22:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18286,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "2777:9:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2741:64:68"
            },
            "src": "2717:89:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18295,
            "name": "LogSetMaxBorrowWei",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18291,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18295,
                  "src": "2846:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2846:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18293,
                  "indexed": false,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18295,
                  "src": "2872:22:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18292,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "2872:9:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2836:64:68"
            },
            "src": "2812:89:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18301,
            "name": "LogSetEarningsRateOverride",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18300,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18297,
                  "indexed": false,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18301,
                  "src": "2949:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2949:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18299,
                  "indexed": false,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 18301,
                  "src": "2975:33:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18298,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2975:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2939:75:68"
            },
            "src": "2907:108:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18305,
            "name": "LogSetMarginRatio",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18303,
                  "indexed": false,
                  "name": "marginRatio",
                  "nodeType": "VariableDeclaration",
                  "scope": 18305,
                  "src": "3054:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18302,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3054:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3044:40:68"
            },
            "src": "3021:64:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18309,
            "name": "LogSetLiquidationSpread",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18307,
                  "indexed": false,
                  "name": "liquidationSpread",
                  "nodeType": "VariableDeclaration",
                  "scope": 18309,
                  "src": "3130:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18306,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3130:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3120:46:68"
            },
            "src": "3091:76:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18313,
            "name": "LogSetEarningsRate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18311,
                  "indexed": false,
                  "name": "earningsRate",
                  "nodeType": "VariableDeclaration",
                  "scope": 18313,
                  "src": "3207:25:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18310,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3207:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3197:41:68"
            },
            "src": "3173:66:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18317,
            "name": "LogSetMinBorrowedValue",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18315,
                  "indexed": false,
                  "name": "minBorrowedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 18317,
                  "src": "3283:31:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18314,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "3283:14:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3273:47:68"
            },
            "src": "3245:76:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18321,
            "name": "LogSetAccountMaxNumberOfMarketsWithBalances",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18319,
                  "indexed": false,
                  "name": "accountMaxNumberOfMarketsWithBalances",
                  "nodeType": "VariableDeclaration",
                  "scope": 18321,
                  "src": "3386:45:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3386:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3376:61:68"
            },
            "src": "3327:111:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18325,
            "name": "LogSetOracleSentinel",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18323,
                  "indexed": false,
                  "name": "oracleSentinel",
                  "nodeType": "VariableDeclaration",
                  "scope": 18325,
                  "src": "3480:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                    "typeString": "contract IOracleSentinel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18322,
                    "name": "IOracleSentinel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24817,
                    "src": "3480:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3470:46:68"
            },
            "src": "3444:73:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18329,
            "name": "LogSetCallbackGasLimit",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18327,
                  "indexed": false,
                  "name": "callbackGasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 18329,
                  "src": "3561:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3561:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3551:40:68"
            },
            "src": "3523:69:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18333,
            "name": "LogSetDefaultAccountRiskOverrideSetter",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18331,
                  "indexed": false,
                  "name": "defaultAccountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18333,
                  "src": "3652:59:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18330,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "3652:26:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3642:75:68"
            },
            "src": "3598:120:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18339,
            "name": "LogSetAccountRiskOverrideSetter",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18335,
                  "indexed": false,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 18339,
                  "src": "3771:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18334,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3771:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18337,
                  "indexed": false,
                  "name": "accountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18339,
                  "src": "3801:52:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18336,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "3801:26:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3761:98:68"
            },
            "src": "3724:136:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18345,
            "name": "LogSetGlobalOperator",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18341,
                  "indexed": false,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 18345,
                  "src": "3902:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18340,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3902:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18343,
                  "indexed": false,
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 18345,
                  "src": "3928:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18342,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3928:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3892:55:68"
            },
            "src": "3866:82:68"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 18351,
            "name": "LogSetAutoTraderIsSpecial",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18347,
                  "indexed": false,
                  "name": "autoTrader",
                  "nodeType": "VariableDeclaration",
                  "scope": 18351,
                  "src": "3995:18:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18346,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3995:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18349,
                  "indexed": false,
                  "name": "isSpecial",
                  "nodeType": "VariableDeclaration",
                  "scope": 18351,
                  "src": "4023:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18348,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4023:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3985:58:68"
            },
            "src": "3954:90:68"
          },
          {
            "body": {
              "id": 18434,
              "nodeType": "Block",
              "src": "4268:626:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18363,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18353,
                        "src": "4296:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18364,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18355,
                        "src": "4303:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18362,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "4278:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4278:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18366,
                  "nodeType": "ExpressionStatement",
                  "src": "4278:34:68"
                },
                {
                  "assignments": [
                    18370
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18370,
                      "name": "excessWei",
                      "nodeType": "VariableDeclaration",
                      "scope": 18434,
                      "src": "4322:26:68",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 18369,
                        "name": "Types.Wei",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 31149,
                        "src": "4322:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                          "typeString": "struct Types.Wei"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18375,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18373,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18355,
                        "src": "4376:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18371,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18353,
                        "src": "4351:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      "id": 18372,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getNumExcessTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28912,
                      "src": "4351:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$_t_struct$_Wei_$31149_memory_ptr_$bound_to$_t_struct$_State_$28760_storage_ptr_$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view returns (struct Types.Wei memory)"
                      }
                    },
                    "id": 18374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4351:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                      "typeString": "struct Types.Wei memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4322:63:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "4422:23:68",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 18379,
                              "name": "excessWei",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18370,
                              "src": "4423:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                                "typeString": "struct Types.Wei memory"
                              }
                            },
                            "id": 18380,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isNegative",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 31331,
                            "src": "4423:20:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_Wei_$31149_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Wei_$31149_memory_ptr_$",
                              "typeString": "function (struct Types.Wei memory) pure returns (bool)"
                            }
                          },
                          "id": 18381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4423:22:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18383,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "4459:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6567617469766520657863657373",
                        "id": 18384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4477:17:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1694077b1d3a41b6efa6b359ff29d037b08435c5c42340397982ef9c0bd82585",
                          "typeString": "literal_string \"Negative excess\""
                        },
                        "value": "Negative excess"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1694077b1d3a41b6efa6b359ff29d037b08435c5c42340397982ef9c0bd82585",
                          "typeString": "literal_string \"Negative excess\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18376,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "4396:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "4396:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4396:108:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18386,
                  "nodeType": "ExpressionStatement",
                  "src": "4396:108:68"
                },
                {
                  "assignments": [
                    18388
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18388,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 18434,
                      "src": "4515:13:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18387,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4515:7:68",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18393,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18391,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18355,
                        "src": "4546:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18389,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18353,
                        "src": "4531:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      "id": 18390,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28776,
                      "src": "4531:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_State_$28760_storage_ptr_$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view returns (address)"
                      }
                    },
                    "id": 18392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4531:24:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4515:40:68"
                },
                {
                  "assignments": [
                    18395
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18395,
                      "name": "actualBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 18434,
                      "src": "4566:21:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18394,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4566:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18404,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18401,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38313,
                            "src": "4630:4:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AdminImpl_$19547",
                              "typeString": "library AdminImpl"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AdminImpl_$19547",
                              "typeString": "library AdminImpl"
                            }
                          ],
                          "id": 18400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4622:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4622:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18397,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18388,
                            "src": "4605:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18396,
                          "name": "IERC20Detailed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24715,
                          "src": "4590:14:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Detailed_$24715_$",
                            "typeString": "type(contract IERC20Detailed)"
                          }
                        },
                        "id": 18398,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4590:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Detailed_$24715",
                          "typeString": "contract IERC20Detailed"
                        }
                      },
                      "id": 18399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 37497,
                      "src": "4590:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 18403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4590:46:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4566:70:68"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18405,
                        "name": "excessWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18370,
                        "src": "4650:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      },
                      "id": 18406,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31148,
                      "src": "4650:15:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 18407,
                      "name": "actualBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18395,
                      "src": "4668:13:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4650:31:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18416,
                  "nodeType": "IfStatement",
                  "src": "4646:93:68",
                  "trueBody": {
                    "id": 18415,
                    "nodeType": "Block",
                    "src": "4683:56:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18409,
                              "name": "excessWei",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18370,
                              "src": "4697:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                                "typeString": "struct Types.Wei memory"
                              }
                            },
                            "id": 18411,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 31148,
                            "src": "4697:15:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 18412,
                            "name": "actualBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18395,
                            "src": "4715:13:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4697:31:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18414,
                        "nodeType": "ExpressionStatement",
                        "src": "4697:31:68"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18420,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18357,
                        "src": "4764:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18421,
                          "name": "excessWei",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18370,
                          "src": "4775:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                            "typeString": "struct Types.Wei memory"
                          }
                        },
                        "id": 18422,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 31148,
                        "src": "4775:15:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18417,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18388,
                        "src": "4749:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 18419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30771,
                      "src": "4749:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 18423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4749:42:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18424,
                  "nodeType": "ExpressionStatement",
                  "src": "4749:42:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18426,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18388,
                        "src": "4831:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18427,
                          "name": "excessWei",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18370,
                          "src": "4838:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                            "typeString": "struct Types.Wei memory"
                          }
                        },
                        "id": 18428,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 31148,
                        "src": "4838:15:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18425,
                      "name": "LogWithdrawExcessTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18241,
                      "src": "4807:23:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 18429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4807:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18430,
                  "nodeType": "EmitStatement",
                  "src": "4802:52:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 18431,
                      "name": "excessWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18370,
                      "src": "4872:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei memory"
                      }
                    },
                    "id": 18432,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 31148,
                    "src": "4872:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 18361,
                  "id": 18433,
                  "nodeType": "Return",
                  "src": "4865:22:68"
                }
              ]
            },
            "documentation": null,
            "id": 18435,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerWithdrawExcessTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18353,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18435,
                  "src": "4144:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18352,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "4144:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18355,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18435,
                  "src": "4181:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18354,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4181:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18357,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 18435,
                  "src": "4207:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4207:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4134:96:68"
            },
            "returnParameters": {
              "id": 18361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18360,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18435,
                  "src": "4255:7:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18359,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4255:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4254:9:68"
            },
            "scope": 19547,
            "src": "4100:794:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18476,
              "nodeType": "Block",
              "src": "5070:251:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18447,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18437,
                        "src": "5097:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18448,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18439,
                        "src": "5104:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18446,
                      "name": "_requireNoMarket",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19502,
                      "src": "5080:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_address_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,address) view"
                      }
                    },
                    "id": 18449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5080:30:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18450,
                  "nodeType": "ExpressionStatement",
                  "src": "5080:30:68"
                },
                {
                  "assignments": [
                    18452
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18452,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 18476,
                      "src": "5121:15:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18451,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5121:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18461,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18458,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38313,
                            "src": "5179:4:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AdminImpl_$19547",
                              "typeString": "library AdminImpl"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AdminImpl_$19547",
                              "typeString": "library AdminImpl"
                            }
                          ],
                          "id": 18457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5171:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18459,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5171:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18454,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18439,
                            "src": "5154:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18453,
                          "name": "IERC20Detailed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24715,
                          "src": "5139:14:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Detailed_$24715_$",
                            "typeString": "type(contract IERC20Detailed)"
                          }
                        },
                        "id": 18455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5139:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Detailed_$24715",
                          "typeString": "contract IERC20Detailed"
                        }
                      },
                      "id": 18456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 37497,
                      "src": "5139:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 18460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5139:46:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5121:64:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18465,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18441,
                        "src": "5210:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18466,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18452,
                        "src": "5221:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18462,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18439,
                        "src": "5195:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 18464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30771,
                      "src": "5195:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 18467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5195:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18468,
                  "nodeType": "ExpressionStatement",
                  "src": "5195:34:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18470,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18439,
                        "src": "5274:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18471,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18452,
                        "src": "5281:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18469,
                      "name": "LogWithdrawUnsupportedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18247,
                      "src": "5245:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 18472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5245:44:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18473,
                  "nodeType": "EmitStatement",
                  "src": "5240:49:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18474,
                    "name": "balance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18452,
                    "src": "5307:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 18445,
                  "id": 18475,
                  "nodeType": "Return",
                  "src": "5300:14:68"
                }
              ]
            },
            "documentation": null,
            "id": 18477,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerWithdrawUnsupportedTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18442,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18437,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18477,
                  "src": "4949:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18436,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "4949:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18439,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18477,
                  "src": "4986:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4986:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18441,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 18477,
                  "src": "5009:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5009:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4939:93:68"
            },
            "returnParameters": {
              "id": 18445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18444,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18477,
                  "src": "5057:7:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5057:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5056:9:68"
            },
            "scope": 19547,
            "src": "4900:421:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18608,
              "nodeType": "Block",
              "src": "5788:916:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18501,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "5815:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18502,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18481,
                        "src": "5822:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18500,
                      "name": "_requireNoMarket",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19502,
                      "src": "5798:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_address_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,address) view"
                      }
                    },
                    "id": 18503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5798:30:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18504,
                  "nodeType": "ExpressionStatement",
                  "src": "5798:30:68"
                },
                {
                  "assignments": [
                    18506
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18506,
                      "name": "marketId",
                      "nodeType": "VariableDeclaration",
                      "scope": 18608,
                      "src": "5839:16:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18505,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5839:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18509,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 18507,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18479,
                      "src": "5858:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                        "typeString": "struct Storage.State storage pointer"
                      }
                    },
                    "id": 18508,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "numMarkets",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28727,
                    "src": "5858:16:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5839:35:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18510,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "5884:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      "id": 18512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "numMarkets",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28727,
                      "src": "5884:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 18513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5904:1:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "5884:21:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18515,
                  "nodeType": "ExpressionStatement",
                  "src": "5884:21:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18516,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18479,
                            "src": "5916:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 18519,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "5916:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 18520,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18518,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18506,
                          "src": "5930:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5916:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 18521,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28668,
                      "src": "5916:29:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18522,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18481,
                      "src": "5948:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5916:37:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 18524,
                  "nodeType": "ExpressionStatement",
                  "src": "5916:37:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18525,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18479,
                            "src": "5963:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 18528,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "5963:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 18529,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18527,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18506,
                          "src": "5977:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5963:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 18530,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "index",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28674,
                      "src": "5963:29:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Index_$27471_storage",
                        "typeString": "struct Interest.Index storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 18531,
                          "name": "Interest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27750,
                          "src": "5995:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Interest_$27750_$",
                            "typeString": "type(library Interest)"
                          }
                        },
                        "id": 18532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "newIndex",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27606,
                        "src": "5995:17:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Index_$27471_memory_ptr_$",
                          "typeString": "function () view returns (struct Interest.Index memory)"
                        }
                      },
                      "id": 18533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5995:19:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Index_$27471_memory_ptr",
                        "typeString": "struct Interest.Index memory"
                      }
                    },
                    "src": "5963:51:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Index_$27471_storage",
                      "typeString": "struct Interest.Index storage ref"
                    }
                  },
                  "id": 18535,
                  "nodeType": "ExpressionStatement",
                  "src": "5963:51:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18536,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18479,
                            "src": "6024:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 18539,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "6024:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 18540,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18538,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18506,
                          "src": "6038:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6024:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 18541,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isClosing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28670,
                      "src": "6024:33:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18542,
                      "name": "isClosing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18497,
                      "src": "6060:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6024:45:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18544,
                  "nodeType": "ExpressionStatement",
                  "src": "6024:45:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18545,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18479,
                          "src": "6079:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18548,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenToMarketId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28735,
                        "src": "6079:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 18549,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 18547,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18481,
                        "src": "6101:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6079:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18550,
                      "name": "marketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18506,
                      "src": "6110:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6079:39:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18552,
                  "nodeType": "ExpressionStatement",
                  "src": "6079:39:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18554,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6147:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18555,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18481,
                        "src": "6157:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18553,
                      "name": "LogAddMarket",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18253,
                      "src": "6134:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 18556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6134:29:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18557,
                  "nodeType": "EmitStatement",
                  "src": "6129:34:68"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 18558,
                    "name": "isClosing",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18497,
                    "src": "6177:9:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18565,
                  "nodeType": "IfStatement",
                  "src": "6173:81:68",
                  "trueBody": {
                    "id": 18564,
                    "nodeType": "Block",
                    "src": "6188:66:68",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 18560,
                              "name": "marketId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18506,
                              "src": "6223:8:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18561,
                              "name": "isClosing",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18497,
                              "src": "6233:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 18559,
                            "name": "LogSetIsClosing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18259,
                            "src": "6207:15:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                              "typeString": "function (uint256,bool)"
                            }
                          },
                          "id": 18562,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6207:36:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 18563,
                        "nodeType": "EmitStatement",
                        "src": "6202:41:68"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18567,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6280:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18568,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6287:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18569,
                        "name": "priceOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18483,
                        "src": "6297:11:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                          "typeString": "contract IPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                          "typeString": "contract IPriceOracle"
                        }
                      ],
                      "id": 18566,
                      "name": "_setPriceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19243,
                      "src": "6264:15:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_contract$_IPriceOracle_$24835_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,contract IPriceOracle)"
                      }
                    },
                    "id": 18570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6264:45:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18571,
                  "nodeType": "ExpressionStatement",
                  "src": "6264:45:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18573,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6338:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18574,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6345:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18575,
                        "name": "interestSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18485,
                        "src": "6355:14:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      ],
                      "id": 18572,
                      "name": "_setInterestSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19285,
                      "src": "6319:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_contract$_IInterestSetter_$24789_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,contract IInterestSetter)"
                      }
                    },
                    "id": 18576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6319:51:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18577,
                  "nodeType": "ExpressionStatement",
                  "src": "6319:51:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18579,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6398:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18580,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6405:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18581,
                        "name": "marginPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18487,
                        "src": "6415:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18578,
                      "name": "_setMarginPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19322,
                      "src": "6380:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6380:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18583,
                  "nodeType": "ExpressionStatement",
                  "src": "6380:49:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18585,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6468:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18586,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6475:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18587,
                        "name": "liquidationSpreadPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18489,
                        "src": "6485:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18584,
                      "name": "_setLiquidationSpreadPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19359,
                      "src": "6439:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6439:71:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18589,
                  "nodeType": "ExpressionStatement",
                  "src": "6439:71:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18591,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6537:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18592,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6544:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18593,
                        "name": "maxSupplyWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18491,
                        "src": "6554:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18590,
                      "name": "_setMaxSupplyWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19395,
                      "src": "6520:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,uint256)"
                      }
                    },
                    "id": 18594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6520:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18595,
                  "nodeType": "ExpressionStatement",
                  "src": "6520:47:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18597,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6594:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18598,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6601:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18599,
                        "name": "maxBorrowWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18493,
                        "src": "6611:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18596,
                      "name": "_setMaxBorrowWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19431,
                      "src": "6577:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,uint256)"
                      }
                    },
                    "id": 18600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6577:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18601,
                  "nodeType": "ExpressionStatement",
                  "src": "6577:47:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18603,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18479,
                        "src": "6659:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18604,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18506,
                        "src": "6666:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18605,
                        "name": "earningsRateOverride",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18495,
                        "src": "6676:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18602,
                      "name": "_setEarningsRateOverride",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19468,
                      "src": "6634:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6634:63:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18607,
                  "nodeType": "ExpressionStatement",
                  "src": "6634:63:68"
                }
              ]
            },
            "documentation": null,
            "id": 18609,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerAddMarket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18498,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18479,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5411:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18478,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "5411:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18481,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5448:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18480,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5448:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18483,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5471:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18482,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "5471:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18485,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5505:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18484,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "5505:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18487,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5545:33:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18486,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "5545:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18489,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5588:44:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18488,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "5588:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18491,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5642:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18490,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5642:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18493,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5672:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5672:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18495,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5702:40:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18494,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "5702:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18497,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 18609,
                  "src": "5752:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18496,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5752:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5401:371:68"
            },
            "returnParameters": {
              "id": 18499,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5788:0:68"
            },
            "scope": 19547,
            "src": "5378:1326:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18637,
              "nodeType": "Block",
              "src": "6845:158:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18619,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18611,
                        "src": "6873:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18620,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18613,
                        "src": "6880:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18618,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "6855:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6855:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18622,
                  "nodeType": "ExpressionStatement",
                  "src": "6855:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18623,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18611,
                            "src": "6900:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 18626,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "6900:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 18627,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18625,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18613,
                          "src": "6914:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6900:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 18628,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isClosing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28670,
                      "src": "6900:33:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18629,
                      "name": "isClosing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18615,
                      "src": "6936:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6900:45:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18631,
                  "nodeType": "ExpressionStatement",
                  "src": "6900:45:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18633,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18613,
                        "src": "6976:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18634,
                        "name": "isClosing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18615,
                        "src": "6986:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18632,
                      "name": "LogSetIsClosing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18259,
                      "src": "6960:15:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 18635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6960:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18636,
                  "nodeType": "EmitStatement",
                  "src": "6955:41:68"
                }
              ]
            },
            "documentation": null,
            "id": 18638,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetIsClosing",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18611,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18638,
                  "src": "6746:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18610,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "6746:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18613,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18638,
                  "src": "6783:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18612,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6783:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18615,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 18638,
                  "src": "6809:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18614,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6809:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6736:93:68"
            },
            "returnParameters": {
              "id": 18617,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6845:0:68"
            },
            "scope": 19547,
            "src": "6710:293:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18658,
              "nodeType": "Block",
              "src": "7156:106:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18648,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18640,
                        "src": "7184:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18649,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18642,
                        "src": "7191:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18647,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "7166:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7166:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18651,
                  "nodeType": "ExpressionStatement",
                  "src": "7166:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18653,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18640,
                        "src": "7226:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18654,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18642,
                        "src": "7233:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18655,
                        "name": "priceOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18644,
                        "src": "7243:11:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                          "typeString": "contract IPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                          "typeString": "contract IPriceOracle"
                        }
                      ],
                      "id": 18652,
                      "name": "_setPriceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19243,
                      "src": "7210:15:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_contract$_IPriceOracle_$24835_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,contract IPriceOracle)"
                      }
                    },
                    "id": 18656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7210:45:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18657,
                  "nodeType": "ExpressionStatement",
                  "src": "7210:45:68"
                }
              ]
            },
            "documentation": null,
            "id": 18659,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetPriceOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18645,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18640,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18659,
                  "src": "7047:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18639,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "7047:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18642,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18659,
                  "src": "7084:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18641,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7084:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18644,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 18659,
                  "src": "7110:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18643,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "7110:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7037:103:68"
            },
            "returnParameters": {
              "id": 18646,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7156:0:68"
            },
            "scope": 19547,
            "src": "7009:253:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18679,
              "nodeType": "Block",
              "src": "7424:112:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18669,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18661,
                        "src": "7452:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18670,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18663,
                        "src": "7459:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18668,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "7434:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7434:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18672,
                  "nodeType": "ExpressionStatement",
                  "src": "7434:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18674,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18661,
                        "src": "7497:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18675,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18663,
                        "src": "7504:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18676,
                        "name": "interestSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18665,
                        "src": "7514:14:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      ],
                      "id": 18673,
                      "name": "_setInterestSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19285,
                      "src": "7478:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_contract$_IInterestSetter_$24789_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,contract IInterestSetter)"
                      }
                    },
                    "id": 18677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7478:51:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18678,
                  "nodeType": "ExpressionStatement",
                  "src": "7478:51:68"
                }
              ]
            },
            "documentation": null,
            "id": 18680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetInterestSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18661,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18680,
                  "src": "7309:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18660,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "7309:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18663,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18680,
                  "src": "7346:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18662,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7346:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18665,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 18680,
                  "src": "7372:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18664,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "7372:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7299:109:68"
            },
            "returnParameters": {
              "id": 18667,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7424:0:68"
            },
            "scope": 19547,
            "src": "7268:268:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18700,
              "nodeType": "Block",
              "src": "7700:110:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18690,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18682,
                        "src": "7728:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18691,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18684,
                        "src": "7735:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18689,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "7710:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7710:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18693,
                  "nodeType": "ExpressionStatement",
                  "src": "7710:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18695,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18682,
                        "src": "7772:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18696,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18684,
                        "src": "7779:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18697,
                        "name": "marginPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18686,
                        "src": "7789:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18694,
                      "name": "_setMarginPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19322,
                      "src": "7754:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7754:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18699,
                  "nodeType": "ExpressionStatement",
                  "src": "7754:49:68"
                }
              ]
            },
            "documentation": null,
            "id": 18701,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMarginPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18682,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18701,
                  "src": "7582:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18681,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "7582:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18684,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18701,
                  "src": "7619:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18683,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7619:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18686,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18701,
                  "src": "7645:33:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18685,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7645:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7572:112:68"
            },
            "returnParameters": {
              "id": 18688,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7700:0:68"
            },
            "scope": 19547,
            "src": "7542:268:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18721,
              "nodeType": "Block",
              "src": "7996:132:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18711,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18703,
                        "src": "8024:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18712,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18705,
                        "src": "8031:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18710,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "8006:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8006:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18714,
                  "nodeType": "ExpressionStatement",
                  "src": "8006:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18716,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18703,
                        "src": "8079:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18717,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18705,
                        "src": "8086:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18718,
                        "name": "liquidationSpreadPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18707,
                        "src": "8096:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18715,
                      "name": "_setLiquidationSpreadPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19359,
                      "src": "8050:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8050:71:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18720,
                  "nodeType": "ExpressionStatement",
                  "src": "8050:71:68"
                }
              ]
            },
            "documentation": null,
            "id": 18722,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetLiquidationSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18703,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18722,
                  "src": "7867:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18702,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "7867:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18705,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18722,
                  "src": "7904:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18704,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7904:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18707,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 18722,
                  "src": "7930:44:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18706,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7930:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7857:123:68"
            },
            "returnParameters": {
              "id": 18709,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7996:0:68"
            },
            "scope": 19547,
            "src": "7816:312:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18742,
              "nodeType": "Block",
              "src": "8278:108:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18732,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18724,
                        "src": "8306:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18733,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18726,
                        "src": "8313:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18731,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "8288:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8288:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18735,
                  "nodeType": "ExpressionStatement",
                  "src": "8288:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18737,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18724,
                        "src": "8349:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18738,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18726,
                        "src": "8356:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18739,
                        "name": "maxSupplyWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18728,
                        "src": "8366:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18736,
                      "name": "_setMaxSupplyWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19395,
                      "src": "8332:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,uint256)"
                      }
                    },
                    "id": 18740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8332:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18741,
                  "nodeType": "ExpressionStatement",
                  "src": "8332:47:68"
                }
              ]
            },
            "documentation": null,
            "id": 18743,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMaxSupplyWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18729,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18724,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18743,
                  "src": "8173:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18723,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "8173:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18726,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18743,
                  "src": "8210:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8210:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18728,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18743,
                  "src": "8236:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18727,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8236:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8163:99:68"
            },
            "returnParameters": {
              "id": 18730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8278:0:68"
            },
            "scope": 19547,
            "src": "8134:252:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18763,
              "nodeType": "Block",
              "src": "8536:108:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18753,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18745,
                        "src": "8564:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18754,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18747,
                        "src": "8571:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18752,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "8546:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8546:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18756,
                  "nodeType": "ExpressionStatement",
                  "src": "8546:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18758,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18745,
                        "src": "8607:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18759,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18747,
                        "src": "8614:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18760,
                        "name": "maxBorrowWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18749,
                        "src": "8624:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18757,
                      "name": "_setMaxBorrowWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19431,
                      "src": "8590:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,uint256)"
                      }
                    },
                    "id": 18761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8590:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18762,
                  "nodeType": "ExpressionStatement",
                  "src": "8590:47:68"
                }
              ]
            },
            "documentation": null,
            "id": 18764,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMaxBorrowWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18750,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18745,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18764,
                  "src": "8431:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18744,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "8431:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18747,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18764,
                  "src": "8468:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18746,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8468:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18749,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 18764,
                  "src": "8494:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18748,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8494:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8421:99:68"
            },
            "returnParameters": {
              "id": 18751,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8536:0:68"
            },
            "scope": 19547,
            "src": "8392:252:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18784,
              "nodeType": "Block",
              "src": "8822:124:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18774,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18766,
                        "src": "8850:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18775,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18768,
                        "src": "8857:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18773,
                      "name": "_validateMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19532,
                      "src": "8832:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256) view"
                      }
                    },
                    "id": 18776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8832:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18777,
                  "nodeType": "ExpressionStatement",
                  "src": "8832:34:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18779,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18766,
                        "src": "8901:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18780,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18768,
                        "src": "8908:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18781,
                        "name": "earningsRateOverride",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18770,
                        "src": "8918:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18778,
                      "name": "_setEarningsRateOverride",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19468,
                      "src": "8876:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_State_$28760_storage_ptr_$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Storage.State storage pointer,uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8876:63:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18783,
                  "nodeType": "ExpressionStatement",
                  "src": "8876:63:68"
                }
              ]
            },
            "documentation": null,
            "id": 18785,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetEarningsRateOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18766,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18785,
                  "src": "8697:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18765,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "8697:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18768,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 18785,
                  "src": "8734:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8734:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18770,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 18785,
                  "src": "8760:40:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18769,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "8760:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8687:119:68"
            },
            "returnParameters": {
              "id": 18772,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8822:0:68"
            },
            "scope": 19547,
            "src": "8650:296:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18831,
              "nodeType": "Block",
              "src": "9123:391:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18795,
                            "name": "ratio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18789,
                            "src": "9159:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18796,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9159:11:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18797,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18787,
                              "src": "9174:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 18798,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "9174:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 18799,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "marginRatioMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28712,
                          "src": "9174:31:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "9159:46:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18801,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "9219:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526174696f20746f6f2068696768",
                        "id": 18802,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9237:16:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d1c35770d302ac7e441261e804be2a1cd737155595352d0e2a8c5066b83dc3",
                          "typeString": "literal_string \"Ratio too high\""
                        },
                        "value": "Ratio too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d1c35770d302ac7e441261e804be2a1cd737155595352d0e2a8c5066b83dc3",
                          "typeString": "literal_string \"Ratio too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18792,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "9133:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "9133:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9133:130:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18804,
                  "nodeType": "ExpressionStatement",
                  "src": "9133:130:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18808,
                            "name": "ratio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18789,
                            "src": "9299:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18809,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9299:11:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18810,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18787,
                                "src": "9313:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                  "typeString": "struct Storage.State storage pointer"
                                }
                              },
                              "id": 18811,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "riskParams",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28757,
                              "src": "9313:16:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                                "typeString": "struct Storage.RiskParams storage ref"
                              }
                            },
                            "id": 18812,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "liquidationSpread",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28693,
                            "src": "9313:34:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_storage",
                              "typeString": "struct Decimal.D256 storage ref"
                            }
                          },
                          "id": 18813,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9313:40:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9299:54:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18815,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "9367:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526174696f2063616e6e6f74206265203c3d20737072656164",
                        "id": 18816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9385:27:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_74d76c251be78a661296cb71ed2ac6b72b2be2c9fadd5e26131efaec3d9dffb0",
                          "typeString": "literal_string \"Ratio cannot be <= spread\""
                        },
                        "value": "Ratio cannot be <= spread"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_74d76c251be78a661296cb71ed2ac6b72b2be2c9fadd5e26131efaec3d9dffb0",
                          "typeString": "literal_string \"Ratio cannot be <= spread\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18805,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "9273:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18807,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "9273:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9273:149:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18818,
                  "nodeType": "ExpressionStatement",
                  "src": "9273:149:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18819,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18787,
                          "src": "9432:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18822,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "9432:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18823,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "marginRatio",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28691,
                      "src": "9432:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18824,
                      "name": "ratio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18789,
                      "src": "9463:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "9432:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 18826,
                  "nodeType": "ExpressionStatement",
                  "src": "9432:36:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18828,
                        "name": "ratio",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18789,
                        "src": "9501:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18827,
                      "name": "LogSetMarginRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18305,
                      "src": "9483:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9483:24:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18830,
                  "nodeType": "EmitStatement",
                  "src": "9478:29:68"
                }
              ]
            },
            "documentation": null,
            "id": 18832,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMarginRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18787,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18832,
                  "src": "9039:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18786,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "9039:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18789,
                  "name": "ratio",
                  "nodeType": "VariableDeclaration",
                  "scope": 18832,
                  "src": "9076:25:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18788,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "9076:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9029:78:68"
            },
            "returnParameters": {
              "id": 18791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9123:0:68"
            },
            "scope": 19547,
            "src": "9001:513:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18878,
              "nodeType": "Block",
              "src": "9649:408:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18847,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18842,
                            "name": "spread",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18836,
                            "src": "9685:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18843,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9685:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18844,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18834,
                              "src": "9701:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 18845,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "9701:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 18846,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "liquidationSpreadMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28714,
                          "src": "9701:37:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "9685:53:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18848,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "9752:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53707265616420746f6f2068696768",
                        "id": 18849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9770:17:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a8cfbe7ddd2c203e310d7f7408f1f8dadfdbb31bf0759a10ab43fcfe9b9acdac",
                          "typeString": "literal_string \"Spread too high\""
                        },
                        "value": "Spread too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a8cfbe7ddd2c203e310d7f7408f1f8dadfdbb31bf0759a10ab43fcfe9b9acdac",
                          "typeString": "literal_string \"Spread too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18839,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "9659:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "9659:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9659:138:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18851,
                  "nodeType": "ExpressionStatement",
                  "src": "9659:138:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18855,
                            "name": "spread",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18836,
                            "src": "9833:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18856,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9833:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18857,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18834,
                                "src": "9848:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                  "typeString": "struct Storage.State storage pointer"
                                }
                              },
                              "id": 18858,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "riskParams",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28757,
                              "src": "9848:16:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                                "typeString": "struct Storage.RiskParams storage ref"
                              }
                            },
                            "id": 18859,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "marginRatio",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28691,
                            "src": "9848:28:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_storage",
                              "typeString": "struct Decimal.D256 storage ref"
                            }
                          },
                          "id": 18860,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "9848:34:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9833:49:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18862,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "9896:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5370726561642063616e6e6f74206265203e3d20726174696f",
                        "id": 18863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9914:27:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dedb0136cb33a52e3dbc4c7418335c2535b3ada24d36517f389ee36a9346ad99",
                          "typeString": "literal_string \"Spread cannot be >= ratio\""
                        },
                        "value": "Spread cannot be >= ratio"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dedb0136cb33a52e3dbc4c7418335c2535b3ada24d36517f389ee36a9346ad99",
                          "typeString": "literal_string \"Spread cannot be >= ratio\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18852,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "9807:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18854,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "9807:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9807:144:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18865,
                  "nodeType": "ExpressionStatement",
                  "src": "9807:144:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18866,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18834,
                          "src": "9961:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18869,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "9961:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18870,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "liquidationSpread",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28693,
                      "src": "9961:34:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18871,
                      "name": "spread",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18836,
                      "src": "9998:6:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "9961:43:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 18873,
                  "nodeType": "ExpressionStatement",
                  "src": "9961:43:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18875,
                        "name": "spread",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18836,
                        "src": "10043:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18874,
                      "name": "LogSetLiquidationSpread",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18309,
                      "src": "10019:23:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10019:31:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18877,
                  "nodeType": "EmitStatement",
                  "src": "10014:36:68"
                }
              ]
            },
            "documentation": null,
            "id": 18879,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetLiquidationSpread",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18837,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18834,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18879,
                  "src": "9564:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18833,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "9564:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18836,
                  "name": "spread",
                  "nodeType": "VariableDeclaration",
                  "scope": 18879,
                  "src": "9601:26:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18835,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "9601:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9554:79:68"
            },
            "returnParameters": {
              "id": 18838,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9649:0:68"
            },
            "scope": 19547,
            "src": "9520:537:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18911,
              "nodeType": "Block",
              "src": "10193:255:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18889,
                            "name": "earningsRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18883,
                            "src": "10229:12:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 18890,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "10229:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18891,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18881,
                              "src": "10251:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 18892,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "10251:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 18893,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "earningsRateMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28716,
                          "src": "10251:32:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "10229:54:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18895,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "10297:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5261746520746f6f2068696768",
                        "id": 18896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10315:15:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7239863884fd78e1fcc1bb23093789e3e4a6fc4746a33bac7fd8ca038fba5641",
                          "typeString": "literal_string \"Rate too high\""
                        },
                        "value": "Rate too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7239863884fd78e1fcc1bb23093789e3e4a6fc4746a33bac7fd8ca038fba5641",
                          "typeString": "literal_string \"Rate too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18886,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "10203:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18888,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "10203:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10203:137:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18898,
                  "nodeType": "ExpressionStatement",
                  "src": "10203:137:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18899,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18881,
                          "src": "10350:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18902,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "10350:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18903,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "earningsRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28695,
                      "src": "10350:29:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18904,
                      "name": "earningsRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18883,
                      "src": "10382:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "10350:44:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 18906,
                  "nodeType": "ExpressionStatement",
                  "src": "10350:44:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18908,
                        "name": "earningsRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18883,
                        "src": "10428:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 18907,
                      "name": "LogSetEarningsRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18313,
                      "src": "10409:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (struct Decimal.D256 memory)"
                      }
                    },
                    "id": 18909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10409:32:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18910,
                  "nodeType": "EmitStatement",
                  "src": "10404:37:68"
                }
              ]
            },
            "documentation": null,
            "id": 18912,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetEarningsRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18881,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18912,
                  "src": "10102:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18880,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "10102:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18883,
                  "name": "earningsRate",
                  "nodeType": "VariableDeclaration",
                  "scope": 18912,
                  "src": "10139:32:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18882,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "10139:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10092:85:68"
            },
            "returnParameters": {
              "id": 18885,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10193:0:68"
            },
            "scope": 19547,
            "src": "10063:385:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18944,
              "nodeType": "Block",
              "src": "10594:280:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18927,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18922,
                            "name": "minBorrowedValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18916,
                            "src": "10630:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                              "typeString": "struct Monetary.Value memory"
                            }
                          },
                          "id": 18923,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27758,
                          "src": "10630:22:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18924,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18914,
                              "src": "10656:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 18925,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "10656:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 18926,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "minBorrowedValueMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28724,
                          "src": "10656:36:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "src": "10630:62:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18928,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "10706:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56616c756520746f6f2068696768",
                        "id": 18929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10724:16:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5235fb147686bcfd3bfd0ea602d4be817fe6da64631d8dc1e0d64e02da6f14bb",
                          "typeString": "literal_string \"Value too high\""
                        },
                        "value": "Value too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5235fb147686bcfd3bfd0ea602d4be817fe6da64631d8dc1e0d64e02da6f14bb",
                          "typeString": "literal_string \"Value too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18919,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "10604:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "10604:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10604:146:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18931,
                  "nodeType": "ExpressionStatement",
                  "src": "10604:146:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18932,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18914,
                          "src": "10760:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18935,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "10760:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18936,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "minBorrowedValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28697,
                      "src": "10760:33:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Value_$27759_storage",
                        "typeString": "struct Monetary.Value storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18937,
                      "name": "minBorrowedValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18916,
                      "src": "10796:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                        "typeString": "struct Monetary.Value memory"
                      }
                    },
                    "src": "10760:52:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage",
                      "typeString": "struct Monetary.Value storage ref"
                    }
                  },
                  "id": 18939,
                  "nodeType": "ExpressionStatement",
                  "src": "10760:52:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18941,
                        "name": "minBorrowedValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18916,
                        "src": "10850:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                          "typeString": "struct Monetary.Value memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                          "typeString": "struct Monetary.Value memory"
                        }
                      ],
                      "id": 18940,
                      "name": "LogSetMinBorrowedValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18317,
                      "src": "10827:22:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_Value_$27759_memory_ptr_$returns$__$",
                        "typeString": "function (struct Monetary.Value memory)"
                      }
                    },
                    "id": 18942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10827:40:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18943,
                  "nodeType": "EmitStatement",
                  "src": "10822:45:68"
                }
              ]
            },
            "documentation": null,
            "id": 18945,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMinBorrowedValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18914,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18945,
                  "src": "10497:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18913,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "10497:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18916,
                  "name": "minBorrowedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 18945,
                  "src": "10534:38:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18915,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "10534:14:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10487:91:68"
            },
            "returnParameters": {
              "id": 18918,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10594:0:68"
            },
            "scope": 19547,
            "src": "10454:420:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18984,
              "nodeType": "Block",
              "src": "11040:512:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18955,
                          "name": "accountMaxNumberOfMarketsWithBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18949,
                          "src": "11076:37:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 18956,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11117:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "src": "11076:42:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18958,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "11132:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6178206e756d626572206f66206d61726b65747320746f6f206c6f77",
                        "id": 18959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11150:31:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cb237a0b88f2b387ddc604e054a4672a0d91a39d777de2cb862a3075892cff9d",
                          "typeString": "literal_string \"Max number of markets too low\""
                        },
                        "value": "Max number of markets too low"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cb237a0b88f2b387ddc604e054a4672a0d91a39d777de2cb862a3075892cff9d",
                          "typeString": "literal_string \"Max number of markets too low\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18952,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "11050:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "11050:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11050:141:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18961,
                  "nodeType": "ExpressionStatement",
                  "src": "11050:141:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18965,
                          "name": "accountMaxNumberOfMarketsWithBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18949,
                          "src": "11227:37:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3634",
                          "id": 18966,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11268:2:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_64_by_1",
                            "typeString": "int_const 64"
                          },
                          "value": "64"
                        },
                        "src": "11227:43:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18968,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "11284:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6178206e756d626572206f66206d61726b65747320746f6f2068696768",
                        "id": 18969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11302:32:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4fc380cd7e82b8edc861591f2b98e4ea3a1815466b600cf1cb84990b3d50327a",
                          "typeString": "literal_string \"Max number of markets too high\""
                        },
                        "value": "Max number of markets too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4fc380cd7e82b8edc861591f2b98e4ea3a1815466b600cf1cb84990b3d50327a",
                          "typeString": "literal_string \"Max number of markets too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18962,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "11201:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "11201:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 18970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11201:143:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18971,
                  "nodeType": "ExpressionStatement",
                  "src": "11201:143:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18972,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18947,
                          "src": "11354:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 18975,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "11354:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 18976,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "accountMaxNumberOfMarketsWithBalances",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28699,
                      "src": "11354:54:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18977,
                      "name": "accountMaxNumberOfMarketsWithBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18949,
                      "src": "11411:37:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11354:94:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18979,
                  "nodeType": "ExpressionStatement",
                  "src": "11354:94:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18981,
                        "name": "accountMaxNumberOfMarketsWithBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18949,
                        "src": "11507:37:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18980,
                      "name": "LogSetAccountMaxNumberOfMarketsWithBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18321,
                      "src": "11463:43:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 18982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11463:82:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18983,
                  "nodeType": "EmitStatement",
                  "src": "11458:87:68"
                }
              ]
            },
            "documentation": null,
            "id": 18985,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAccountMaxNumberOfMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18947,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 18985,
                  "src": "10944:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18946,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "10944:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18949,
                  "name": "accountMaxNumberOfMarketsWithBalances",
                  "nodeType": "VariableDeclaration",
                  "scope": 18985,
                  "src": "10981:45:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18948,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10981:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10934:98:68"
            },
            "returnParameters": {
              "id": 18951,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11040:0:68"
            },
            "scope": 19547,
            "src": "10880:672:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19018,
              "nodeType": "Block",
              "src": "11680:292:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 19001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 18995,
                              "name": "oracleSentinel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18989,
                              "src": "11716:14:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                                "typeString": "contract IOracleSentinel"
                              }
                            },
                            "id": 18996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isBorrowAllowed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24806,
                            "src": "11716:30:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 18997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11716:32:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 18998,
                              "name": "oracleSentinel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18989,
                              "src": "11752:14:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                                "typeString": "contract IOracleSentinel"
                              }
                            },
                            "id": 18999,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isLiquidationAllowed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24811,
                            "src": "11752:35:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 19000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11752:37:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11716:73:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19002,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "11803:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206f7261636c652073656e74696e656c",
                        "id": 19003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11821:25:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1f898f5c255ec0421a6103f0738583b1a31386e69a77b177650e8c4c23c9bc0b",
                          "typeString": "literal_string \"Invalid oracle sentinel\""
                        },
                        "value": "Invalid oracle sentinel"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1f898f5c255ec0421a6103f0738583b1a31386e69a77b177650e8c4c23c9bc0b",
                          "typeString": "literal_string \"Invalid oracle sentinel\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18992,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "11690:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 18994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "11690:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11690:166:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19005,
                  "nodeType": "ExpressionStatement",
                  "src": "11690:166:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19012,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19006,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18987,
                          "src": "11866:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19009,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "11866:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 19010,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "oracleSentinel",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28701,
                      "src": "11866:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                        "typeString": "contract IOracleSentinel"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19011,
                      "name": "oracleSentinel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18989,
                      "src": "11900:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                        "typeString": "contract IOracleSentinel"
                      }
                    },
                    "src": "11866:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "id": 19013,
                  "nodeType": "ExpressionStatement",
                  "src": "11866:48:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19015,
                        "name": "oracleSentinel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18989,
                        "src": "11950:14:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                          "typeString": "contract IOracleSentinel"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                          "typeString": "contract IOracleSentinel"
                        }
                      ],
                      "id": 19014,
                      "name": "LogSetOracleSentinel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18325,
                      "src": "11929:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IOracleSentinel_$24817_$returns$__$",
                        "typeString": "function (contract IOracleSentinel)"
                      }
                    },
                    "id": 19016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11929:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19017,
                  "nodeType": "EmitStatement",
                  "src": "11924:41:68"
                }
              ]
            },
            "documentation": null,
            "id": 19019,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetOracleSentinel",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18987,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19019,
                  "src": "11599:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18986,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "11599:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18989,
                  "name": "oracleSentinel",
                  "nodeType": "VariableDeclaration",
                  "scope": 19019,
                  "src": "11636:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                    "typeString": "contract IOracleSentinel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18988,
                    "name": "IOracleSentinel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24817,
                    "src": "11636:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11589:83:68"
            },
            "returnParameters": {
              "id": 18991,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11680:0:68"
            },
            "scope": 19547,
            "src": "11558:414:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19038,
              "nodeType": "Block",
              "src": "12096:485:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19026,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19021,
                          "src": "12467:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19029,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "12467:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 19030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "callbackGasLimit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28703,
                      "src": "12467:33:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19031,
                      "name": "callbackGasLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19023,
                      "src": "12503:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12467:52:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19033,
                  "nodeType": "ExpressionStatement",
                  "src": "12467:52:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19035,
                        "name": "callbackGasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19023,
                        "src": "12557:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19034,
                      "name": "LogSetCallbackGasLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18329,
                      "src": "12534:22:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 19036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12534:40:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19037,
                  "nodeType": "EmitStatement",
                  "src": "12529:45:68"
                }
              ]
            },
            "documentation": null,
            "id": 19039,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetCallbackGasLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19024,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19021,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19039,
                  "src": "12021:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19020,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "12021:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19023,
                  "name": "callbackGasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 19039,
                  "src": "12058:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19022,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12058:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12011:77:68"
            },
            "returnParameters": {
              "id": 19025,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12096:0:68"
            },
            "scope": 19547,
            "src": "11978:603:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19088,
              "nodeType": "Block",
              "src": "12750:577:68",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 19052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 19047,
                          "name": "defaultAccountRiskOverrideSetter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19043,
                          "src": "12772:32:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                            "typeString": "contract IAccountRiskOverrideSetter"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                            "typeString": "contract IAccountRiskOverrideSetter"
                          }
                        ],
                        "id": 19046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "12764:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 19048,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12764:41:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 19050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12817:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 19049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "12809:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 19051,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12809:10:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "12764:55:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 19075,
                  "nodeType": "IfStatement",
                  "src": "12760:379:68",
                  "trueBody": {
                    "id": 19074,
                    "nodeType": "Block",
                    "src": "12821:318:68",
                    "statements": [
                      {
                        "assignments": [
                          19056,
                          19058
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 19056,
                            "name": "marginRatio",
                            "nodeType": "VariableDeclaration",
                            "scope": 19074,
                            "src": "12853:31:68",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 19055,
                              "name": "Decimal.D256",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 25950,
                              "src": "12853:12:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                                "typeString": "struct Decimal.D256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 19058,
                            "name": "liquidationSpread",
                            "nodeType": "VariableDeclaration",
                            "scope": 19074,
                            "src": "12902:37:68",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 19057,
                              "name": "Decimal.D256",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 25950,
                              "src": "12902:12:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                                "typeString": "struct Decimal.D256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 19066,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19062,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 38107,
                                    "src": "13031:3:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 19063,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13031:10:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 19061,
                                "name": "_getDefaultAccount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19546,
                                "src": "13012:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_struct$_Info_$24851_memory_ptr_$",
                                  "typeString": "function (address) pure returns (struct Account.Info memory)"
                                }
                              },
                              "id": 19064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13012:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                                "typeString": "struct Account.Info memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                                "typeString": "struct Account.Info memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19059,
                              "name": "defaultAccountRiskOverrideSetter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19043,
                              "src": "12956:32:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                                "typeString": "contract IAccountRiskOverrideSetter"
                              }
                            },
                            "id": 19060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAccountRiskOverride",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24028,
                            "src": "12956:55:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_struct$_Info_$24851_memory_ptr_$returns$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$",
                              "typeString": "function (struct Account.Info memory) view external returns (struct Decimal.D256 memory,struct Decimal.D256 memory)"
                            }
                          },
                          "id": 19065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12956:87:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$",
                            "typeString": "tuple(struct Decimal.D256 memory,struct Decimal.D256 memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12835:208:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19070,
                              "name": "marginRatio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19056,
                              "src": "13097:11:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 19071,
                              "name": "liquidationSpread",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19058,
                              "src": "13110:17:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19067,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19041,
                              "src": "13057:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19069,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "validateAccountRiskOverrideValues",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 30211,
                            "src": "13057:39:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$returns$__$bound_to$_t_struct$_State_$28760_storage_ptr_$",
                              "typeString": "function (struct Storage.State storage pointer,struct Decimal.D256 memory,struct Decimal.D256 memory) view"
                            }
                          },
                          "id": 19072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13057:71:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 19073,
                        "nodeType": "ExpressionStatement",
                        "src": "13057:71:68"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19076,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19041,
                          "src": "13149:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19079,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "riskParams",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28757,
                        "src": "13149:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                          "typeString": "struct Storage.RiskParams storage ref"
                        }
                      },
                      "id": 19080,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "defaultAccountRiskOverrideSetter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28705,
                      "src": "13149:49:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                        "typeString": "contract IAccountRiskOverrideSetter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19081,
                      "name": "defaultAccountRiskOverrideSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19043,
                      "src": "13201:32:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                        "typeString": "contract IAccountRiskOverrideSetter"
                      }
                    },
                    "src": "13149:84:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "id": 19083,
                  "nodeType": "ExpressionStatement",
                  "src": "13149:84:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19085,
                        "name": "defaultAccountRiskOverrideSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19043,
                        "src": "13287:32:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                          "typeString": "contract IAccountRiskOverrideSetter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                          "typeString": "contract IAccountRiskOverrideSetter"
                        }
                      ],
                      "id": 19084,
                      "name": "LogSetDefaultAccountRiskOverrideSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18333,
                      "src": "13248:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IAccountRiskOverrideSetter_$24029_$returns$__$",
                        "typeString": "function (contract IAccountRiskOverrideSetter)"
                      }
                    },
                    "id": 19086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13248:72:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19087,
                  "nodeType": "EmitStatement",
                  "src": "13243:77:68"
                }
              ]
            },
            "documentation": null,
            "id": 19089,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetDefaultAccountRiskOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19041,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19089,
                  "src": "12640:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19040,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "12640:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19043,
                  "name": "defaultAccountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 19089,
                  "src": "12677:59:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19042,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "12677:26:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12630:112:68"
            },
            "returnParameters": {
              "id": 19045,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12750:0:68"
            },
            "scope": 19547,
            "src": "12587:740:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19142,
              "nodeType": "Block",
              "src": "13512:568:68",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 19104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 19099,
                          "name": "accountRiskOverrideSetter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19095,
                          "src": "13534:25:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                            "typeString": "contract IAccountRiskOverrideSetter"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                            "typeString": "contract IAccountRiskOverrideSetter"
                          }
                        ],
                        "id": 19098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13526:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 19100,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13526:34:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 19102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13572:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 19101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13564:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 19103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13564:10:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "13526:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 19126,
                  "nodeType": "IfStatement",
                  "src": "13522:367:68",
                  "trueBody": {
                    "id": 19125,
                    "nodeType": "Block",
                    "src": "13576:313:68",
                    "statements": [
                      {
                        "assignments": [
                          19108,
                          19110
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 19108,
                            "name": "marginRatio",
                            "nodeType": "VariableDeclaration",
                            "scope": 19125,
                            "src": "13608:31:68",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 19107,
                              "name": "Decimal.D256",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 25950,
                              "src": "13608:12:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                                "typeString": "struct Decimal.D256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 19110,
                            "name": "liquidationSpread",
                            "nodeType": "VariableDeclaration",
                            "scope": 19125,
                            "src": "13657:37:68",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 19109,
                              "name": "Decimal.D256",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 25950,
                              "src": "13657:12:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                                "typeString": "struct Decimal.D256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 19117,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 19114,
                                  "name": "accountOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19093,
                                  "src": "13779:12:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 19113,
                                "name": "_getDefaultAccount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19546,
                                "src": "13760:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_struct$_Info_$24851_memory_ptr_$",
                                  "typeString": "function (address) pure returns (struct Account.Info memory)"
                                }
                              },
                              "id": 19115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13760:32:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                                "typeString": "struct Account.Info memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                                "typeString": "struct Account.Info memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19111,
                              "name": "accountRiskOverrideSetter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19095,
                              "src": "13711:25:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                                "typeString": "contract IAccountRiskOverrideSetter"
                              }
                            },
                            "id": 19112,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAccountRiskOverride",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24028,
                            "src": "13711:48:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_struct$_Info_$24851_memory_ptr_$returns$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$",
                              "typeString": "function (struct Account.Info memory) view external returns (struct Decimal.D256 memory,struct Decimal.D256 memory)"
                            }
                          },
                          "id": 19116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13711:82:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$",
                            "typeString": "tuple(struct Decimal.D256 memory,struct Decimal.D256 memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13590:203:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19121,
                              "name": "marginRatio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19108,
                              "src": "13847:11:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 19122,
                              "name": "liquidationSpread",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19110,
                              "src": "13860:17:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                                "typeString": "struct Decimal.D256 memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19118,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19091,
                              "src": "13807:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19120,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "validateAccountRiskOverrideValues",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 30211,
                            "src": "13807:39:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_State_$28760_storage_ptr_$_t_struct$_D256_$25950_memory_ptr_$_t_struct$_D256_$25950_memory_ptr_$returns$__$bound_to$_t_struct$_State_$28760_storage_ptr_$",
                              "typeString": "function (struct Storage.State storage pointer,struct Decimal.D256 memory,struct Decimal.D256 memory) view"
                            }
                          },
                          "id": 19123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13807:71:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 19124,
                        "nodeType": "ExpressionStatement",
                        "src": "13807:71:68"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19127,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19091,
                            "src": "13899:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19131,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "riskParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28757,
                          "src": "13899:16:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RiskParams_$28710_storage",
                            "typeString": "struct Storage.RiskParams storage ref"
                          }
                        },
                        "id": 19132,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accountRiskOverrideSetterMap",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28709,
                        "src": "13899:45:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_contract$_IAccountRiskOverrideSetter_$24029_$",
                          "typeString": "mapping(address => contract IAccountRiskOverrideSetter)"
                        }
                      },
                      "id": 19133,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19130,
                        "name": "accountOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19093,
                        "src": "13945:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13899:59:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                        "typeString": "contract IAccountRiskOverrideSetter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19134,
                      "name": "accountRiskOverrideSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19095,
                      "src": "13961:25:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                        "typeString": "contract IAccountRiskOverrideSetter"
                      }
                    },
                    "src": "13899:87:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "id": 19136,
                  "nodeType": "ExpressionStatement",
                  "src": "13899:87:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19138,
                        "name": "accountOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19093,
                        "src": "14033:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19139,
                        "name": "accountRiskOverrideSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19095,
                        "src": "14047:25:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                          "typeString": "contract IAccountRiskOverrideSetter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                          "typeString": "contract IAccountRiskOverrideSetter"
                        }
                      ],
                      "id": 19137,
                      "name": "LogSetAccountRiskOverrideSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18339,
                      "src": "14001:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IAccountRiskOverrideSetter_$24029_$returns$__$",
                        "typeString": "function (address,contract IAccountRiskOverrideSetter)"
                      }
                    },
                    "id": 19140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14001:72:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19141,
                  "nodeType": "EmitStatement",
                  "src": "13996:77:68"
                }
              ]
            },
            "documentation": null,
            "id": 19143,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAccountRiskOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19091,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19143,
                  "src": "13379:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19090,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "13379:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19093,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 19143,
                  "src": "13416:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19092,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13416:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19095,
                  "name": "accountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 19143,
                  "src": "13446:52:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19094,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "13446:26:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13369:135:68"
            },
            "returnParameters": {
              "id": 19097,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13512:0:68"
            },
            "scope": 19547,
            "src": "13333:747:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19168,
              "nodeType": "Block",
              "src": "14285:123:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19152,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19145,
                          "src": "14295:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19155,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "globalOperators",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28751,
                        "src": "14295:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 19156,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19154,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19147,
                        "src": "14317:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14295:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "id": 19157,
                        "name": "approved",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19149,
                        "src": "14329:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 19159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14344:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "id": 19160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "14329:16:68",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 19158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14340:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14295:50:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19162,
                  "nodeType": "ExpressionStatement",
                  "src": "14295:50:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19164,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19147,
                        "src": "14382:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19165,
                        "name": "approved",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19149,
                        "src": "14392:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19163,
                      "name": "LogSetGlobalOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18345,
                      "src": "14361:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 19166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14361:40:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19167,
                  "nodeType": "EmitStatement",
                  "src": "14356:45:68"
                }
              ]
            },
            "documentation": null,
            "id": 19169,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetGlobalOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19145,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19169,
                  "src": "14187:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19144,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "14187:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19147,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 19169,
                  "src": "14224:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19146,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14224:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19149,
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 19169,
                  "src": "14250:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19148,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14250:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14177:92:68"
            },
            "returnParameters": {
              "id": 19151,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14285:0:68"
            },
            "scope": 19547,
            "src": "14146:262:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19194,
              "nodeType": "Block",
              "src": "14559:137:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19178,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19171,
                          "src": "14569:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19181,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "specialAutoTraders",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28755,
                        "src": "14569:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 19182,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19180,
                        "name": "autoTrader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19173,
                        "src": "14594:10:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14569:36:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "id": 19183,
                        "name": "isSpecial",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19175,
                        "src": "14608:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 19185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14624:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "id": 19186,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "14608:17:68",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 19184,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14620:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14569:56:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19188,
                  "nodeType": "ExpressionStatement",
                  "src": "14569:56:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19190,
                        "name": "autoTrader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19173,
                        "src": "14667:10:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19191,
                        "name": "isSpecial",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19175,
                        "src": "14679:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 19189,
                      "name": "LogSetAutoTraderIsSpecial",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18351,
                      "src": "14641:25:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 19192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14641:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19193,
                  "nodeType": "EmitStatement",
                  "src": "14636:53:68"
                }
              ]
            },
            "documentation": null,
            "id": 19195,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAutoTraderSpecial",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19171,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "14458:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19170,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "14458:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19173,
                  "name": "autoTrader",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "14495:18:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19172,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14495:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19175,
                  "name": "isSpecial",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "14523:14:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19174,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14523:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14448:95:68"
            },
            "returnParameters": {
              "id": 19177,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14559:0:68"
            },
            "scope": 19547,
            "src": "14414:282:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19242,
              "nodeType": "Block",
              "src": "14898:378:68",
              "statements": [
                {
                  "assignments": [
                    19205
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19205,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 19242,
                      "src": "14960:13:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 19204,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "14960:7:68",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19211,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19206,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19197,
                          "src": "14976:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19207,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "markets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28731,
                        "src": "14976:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                          "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                        }
                      },
                      "id": 19209,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19208,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19199,
                        "src": "14990:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14976:23:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Market_$28689_storage",
                        "typeString": "struct Storage.Market storage ref"
                      }
                    },
                    "id": 19210,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "token",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28668,
                    "src": "14976:29:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14960:45:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19221,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 19217,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19205,
                                "src": "15063:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 19215,
                                "name": "priceOracle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19201,
                                "src": "15042:11:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                                  "typeString": "contract IPriceOracle"
                                }
                              },
                              "id": 19216,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getPrice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24834,
                              "src": "15042:20:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_Price_$27756_memory_ptr_$",
                                "typeString": "function (address) view external returns (struct Monetary.Price memory)"
                              }
                            },
                            "id": 19218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15042:27:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Price_$27756_memory_ptr",
                              "typeString": "struct Monetary.Price memory"
                            }
                          },
                          "id": 19219,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27755,
                          "src": "15042:33:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 19220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15079:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "15042:38:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19222,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "15094:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206f7261636c65207072696365",
                        "id": 19223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15112:22:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b378524dde2c7c3f396f7d9c2e181f68f1bf2cb21a1d3c52e9c9a92f2c874265",
                          "typeString": "literal_string \"Invalid oracle price\""
                        },
                        "value": "Invalid oracle price"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b378524dde2c7c3f396f7d9c2e181f68f1bf2cb21a1d3c52e9c9a92f2c874265",
                          "typeString": "literal_string \"Invalid oracle price\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19212,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "15016:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "15016:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15016:128:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19225,
                  "nodeType": "ExpressionStatement",
                  "src": "15016:128:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19226,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19197,
                            "src": "15155:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19229,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "15155:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19230,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19228,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19199,
                          "src": "15169:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "15155:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19231,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "priceOracle",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28676,
                      "src": "15155:35:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                        "typeString": "contract IPriceOracle"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19232,
                      "name": "priceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19201,
                      "src": "15193:11:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                        "typeString": "contract IPriceOracle"
                      }
                    },
                    "src": "15155:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "id": 19234,
                  "nodeType": "ExpressionStatement",
                  "src": "15155:49:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19236,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19199,
                        "src": "15238:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19238,
                            "name": "priceOracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19201,
                            "src": "15256:11:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                              "typeString": "contract IPriceOracle"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                              "typeString": "contract IPriceOracle"
                            }
                          ],
                          "id": 19237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15248:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15248:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 19235,
                      "name": "LogSetPriceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18265,
                      "src": "15220:17:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 19240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15220:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19241,
                  "nodeType": "EmitStatement",
                  "src": "15215:54:68"
                }
              ]
            },
            "documentation": null,
            "id": 19243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setPriceOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19197,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19243,
                  "src": "14788:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19196,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "14788:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19199,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19243,
                  "src": "14825:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14825:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19201,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 19243,
                  "src": "14851:24:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19200,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "14851:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14778:103:68"
            },
            "returnParameters": {
              "id": 19203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14898:0:68"
            },
            "scope": 19547,
            "src": "14754:522:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19284,
              "nodeType": "Block",
              "src": "15435:322:68",
              "statements": [
                {
                  "assignments": [
                    19253
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19253,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 19284,
                      "src": "15515:13:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 19252,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15515:7:68",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19259,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19254,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19245,
                          "src": "15531:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                            "typeString": "struct Storage.State storage pointer"
                          }
                        },
                        "id": 19255,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "markets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28731,
                        "src": "15531:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                          "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                        }
                      },
                      "id": 19257,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19256,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19247,
                        "src": "15545:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "15531:23:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Market_$28689_storage",
                        "typeString": "struct Storage.Market storage ref"
                      }
                    },
                    "id": 19258,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "token",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28668,
                    "src": "15531:29:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15515:45:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19263,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19253,
                        "src": "15601:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15608:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15611:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19260,
                        "name": "interestSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19249,
                        "src": "15570:14:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                          "typeString": "contract IInterestSetter"
                        }
                      },
                      "id": 19262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getInterestRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24788,
                      "src": "15570:30:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_uint256_$returns$_t_struct$_Rate_$27464_memory_ptr_$",
                        "typeString": "function (address,uint256,uint256) view external returns (struct Interest.Rate memory)"
                      }
                    },
                    "id": 19266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15570:43:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                      "typeString": "struct Interest.Rate memory"
                    }
                  },
                  "id": 19267,
                  "nodeType": "ExpressionStatement",
                  "src": "15570:43:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19268,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19245,
                            "src": "15624:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19271,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "15624:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19272,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19270,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19247,
                          "src": "15638:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "15624:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19273,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interestSetter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28678,
                      "src": "15624:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                        "typeString": "contract IInterestSetter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19274,
                      "name": "interestSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19249,
                      "src": "15665:14:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                        "typeString": "contract IInterestSetter"
                      }
                    },
                    "src": "15624:55:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "id": 19276,
                  "nodeType": "ExpressionStatement",
                  "src": "15624:55:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19278,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19247,
                        "src": "15716:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19280,
                            "name": "interestSetter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19249,
                            "src": "15734:14:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                              "typeString": "contract IInterestSetter"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                              "typeString": "contract IInterestSetter"
                            }
                          ],
                          "id": 19279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15726:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19281,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15726:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 19277,
                      "name": "LogSetInterestSetter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18271,
                      "src": "15695:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 19282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15695:55:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19283,
                  "nodeType": "EmitStatement",
                  "src": "15690:60:68"
                }
              ]
            },
            "documentation": null,
            "id": 19285,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setInterestSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19245,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19285,
                  "src": "15319:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19244,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "15319:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19247,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19285,
                  "src": "15356:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19246,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15356:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19249,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 19285,
                  "src": "15382:30:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19248,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "15382:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15309:109:68"
            },
            "returnParameters": {
              "id": 19251,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15435:0:68"
            },
            "scope": 19547,
            "src": "15282:475:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19321,
              "nodeType": "Block",
              "src": "15918:289:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19297,
                            "name": "marginPremium",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19291,
                            "src": "15954:13:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 19298,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "15954:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19299,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19287,
                              "src": "15977:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19300,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "15977:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 19301,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "marginPremiumMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28718,
                          "src": "15977:33:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "15954:56:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19303,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "16024:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d617267696e207072656d69756d20746f6f2068696768",
                        "id": 19304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16042:25:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0bb8cd903cf0e5f9edbcc0eaec5686d956850ea08141803ab44ec7bc766ee9eb",
                          "typeString": "literal_string \"Margin premium too high\""
                        },
                        "value": "Margin premium too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0bb8cd903cf0e5f9edbcc0eaec5686d956850ea08141803ab44ec7bc766ee9eb",
                          "typeString": "literal_string \"Margin premium too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19294,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "15928:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "15928:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15928:149:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19306,
                  "nodeType": "ExpressionStatement",
                  "src": "15928:149:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19307,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19287,
                            "src": "16087:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19310,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "16087:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19311,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19309,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19289,
                          "src": "16101:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16087:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19312,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "marginPremium",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28680,
                      "src": "16087:37:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19313,
                      "name": "marginPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19291,
                      "src": "16127:13:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "16087:53:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 19315,
                  "nodeType": "ExpressionStatement",
                  "src": "16087:53:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19317,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19289,
                        "src": "16176:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19318,
                        "name": "marginPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19291,
                        "src": "16186:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 19316,
                      "name": "LogSetMarginPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18277,
                      "src": "16156:19:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 19319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16156:44:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19320,
                  "nodeType": "EmitStatement",
                  "src": "16151:49:68"
                }
              ]
            },
            "documentation": null,
            "id": 19322,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setMarginPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19287,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19322,
                  "src": "15799:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19286,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "15799:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19289,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19322,
                  "src": "15836:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15836:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19291,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 19322,
                  "src": "15862:33:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19290,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "15862:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15789:112:68"
            },
            "returnParameters": {
              "id": 19293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15918:0:68"
            },
            "scope": 19547,
            "src": "15763:444:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19358,
              "nodeType": "Block",
              "src": "16390:355:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19334,
                            "name": "liquidationSpreadPremium",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19328,
                            "src": "16426:24:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 19335,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "16426:30:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19336,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19324,
                              "src": "16460:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19337,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "16460:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 19338,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "liquidationSpreadPremiumMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28720,
                          "src": "16460:44:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "16426:78:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19340,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "16518:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "537072656164207072656d69756d20746f6f2068696768",
                        "id": 19341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16536:25:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_973220e11bf34d56bfcbd63043d4fbfcb6fe864cca21f6e2a5ef17801337466d",
                          "typeString": "literal_string \"Spread premium too high\""
                        },
                        "value": "Spread premium too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_973220e11bf34d56bfcbd63043d4fbfcb6fe864cca21f6e2a5ef17801337466d",
                          "typeString": "literal_string \"Spread premium too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19331,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "16400:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "16400:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16400:171:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19343,
                  "nodeType": "ExpressionStatement",
                  "src": "16400:171:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19344,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19324,
                            "src": "16581:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19347,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "16581:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19348,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19346,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19326,
                          "src": "16595:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16581:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19349,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "liquidationSpreadPremium",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28682,
                      "src": "16581:48:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19350,
                      "name": "liquidationSpreadPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19328,
                      "src": "16632:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "16581:75:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 19352,
                  "nodeType": "ExpressionStatement",
                  "src": "16581:75:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19354,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19326,
                        "src": "16703:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19355,
                        "name": "liquidationSpreadPremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19328,
                        "src": "16713:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 19353,
                      "name": "LogSetLiquidationSpreadPremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18283,
                      "src": "16672:30:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 19356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16672:66:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19357,
                  "nodeType": "EmitStatement",
                  "src": "16667:71:68"
                }
              ]
            },
            "documentation": null,
            "id": 19359,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setLiquidationSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19324,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19359,
                  "src": "16260:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19323,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "16260:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19326,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19359,
                  "src": "16297:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19325,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16297:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19328,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 19359,
                  "src": "16323:44:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19327,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "16323:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16250:123:68"
            },
            "returnParameters": {
              "id": 19330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16390:0:68"
            },
            "scope": 19547,
            "src": "16213:532:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19394,
              "nodeType": "Block",
              "src": "16892:223:68",
              "statements": [
                {
                  "assignments": [
                    19371
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19371,
                      "name": "maxSupplyWeiStruct",
                      "nodeType": "VariableDeclaration",
                      "scope": 19394,
                      "src": "16902:35:68",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 19370,
                        "name": "Types.Wei",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 31149,
                        "src": "16902:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                          "typeString": "struct Types.Wei"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19379,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 19374,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16950:4:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 19375,
                            "name": "maxSupplyWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19365,
                            "src": "16956:12:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 19376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "to128",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26183,
                          "src": "16956:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint128)"
                          }
                        },
                        "id": 19377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16956:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19372,
                        "name": "Types",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31361,
                        "src": "16940:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Types_$31361_$",
                          "typeString": "type(library Types)"
                        }
                      },
                      "id": 19373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Wei",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31149,
                      "src": "16940:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Wei_$31149_storage_ptr_$",
                        "typeString": "type(struct Types.Wei storage pointer)"
                      }
                    },
                    "id": 19378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16940:37:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_memory",
                      "typeString": "struct Types.Wei memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16902:75:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19380,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19361,
                            "src": "16987:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19383,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "16987:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19384,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19382,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19363,
                          "src": "17001:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16987:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19385,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maxSupplyWei",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28684,
                      "src": "16987:36:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_storage",
                        "typeString": "struct Types.Wei storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19386,
                      "name": "maxSupplyWeiStruct",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19371,
                      "src": "17026:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei memory"
                      }
                    },
                    "src": "16987:57:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage",
                      "typeString": "struct Types.Wei storage ref"
                    }
                  },
                  "id": 19388,
                  "nodeType": "ExpressionStatement",
                  "src": "16987:57:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19390,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19363,
                        "src": "17079:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19391,
                        "name": "maxSupplyWeiStruct",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19371,
                        "src": "17089:18:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      ],
                      "id": 19389,
                      "name": "LogSetMaxSupplyWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18289,
                      "src": "17060:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_Wei_$31149_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Types.Wei memory)"
                      }
                    },
                    "id": 19392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17060:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19393,
                  "nodeType": "EmitStatement",
                  "src": "17055:53:68"
                }
              ]
            },
            "documentation": null,
            "id": 19395,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setMaxSupplyWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19361,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19395,
                  "src": "16786:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19360,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "16786:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19363,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19395,
                  "src": "16823:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19362,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16823:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19365,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 19395,
                  "src": "16849:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19364,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16849:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16776:99:68"
            },
            "returnParameters": {
              "id": 19367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16892:0:68"
            },
            "scope": 19547,
            "src": "16751:364:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19430,
              "nodeType": "Block",
              "src": "17262:224:68",
              "statements": [
                {
                  "assignments": [
                    19407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19407,
                      "name": "maxBorrowWeiStruct",
                      "nodeType": "VariableDeclaration",
                      "scope": 19430,
                      "src": "17272:35:68",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 19406,
                        "name": "Types.Wei",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 31149,
                        "src": "17272:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                          "typeString": "struct Types.Wei"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19415,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 19410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17320:5:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 19411,
                            "name": "maxBorrowWei",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19401,
                            "src": "17327:12:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 19412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "to128",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26183,
                          "src": "17327:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint128)"
                          }
                        },
                        "id": 19413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17327:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19408,
                        "name": "Types",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31361,
                        "src": "17310:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Types_$31361_$",
                          "typeString": "type(library Types)"
                        }
                      },
                      "id": 19409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Wei",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31149,
                      "src": "17310:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Wei_$31149_storage_ptr_$",
                        "typeString": "type(struct Types.Wei storage pointer)"
                      }
                    },
                    "id": 19414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17310:38:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_memory",
                      "typeString": "struct Types.Wei memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17272:76:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19416,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19397,
                            "src": "17358:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19419,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "17358:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19420,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19418,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19399,
                          "src": "17372:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17358:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19421,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maxBorrowWei",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28686,
                      "src": "17358:36:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_storage",
                        "typeString": "struct Types.Wei storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19422,
                      "name": "maxBorrowWeiStruct",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19407,
                      "src": "17397:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                        "typeString": "struct Types.Wei memory"
                      }
                    },
                    "src": "17358:57:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage",
                      "typeString": "struct Types.Wei storage ref"
                    }
                  },
                  "id": 19424,
                  "nodeType": "ExpressionStatement",
                  "src": "17358:57:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19426,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19399,
                        "src": "17450:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19427,
                        "name": "maxBorrowWeiStruct",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19407,
                        "src": "17460:18:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                          "typeString": "struct Types.Wei memory"
                        }
                      ],
                      "id": 19425,
                      "name": "LogSetMaxBorrowWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18295,
                      "src": "17431:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_Wei_$31149_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Types.Wei memory)"
                      }
                    },
                    "id": 19428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17431:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19429,
                  "nodeType": "EmitStatement",
                  "src": "17426:53:68"
                }
              ]
            },
            "documentation": null,
            "id": 19431,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setMaxBorrowWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19397,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19431,
                  "src": "17156:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19396,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "17156:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19399,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19431,
                  "src": "17193:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19398,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17193:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19401,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 19431,
                  "src": "17219:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17219:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17146:99:68"
            },
            "returnParameters": {
              "id": 19403,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17262:0:68"
            },
            "scope": 19547,
            "src": "17121:365:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19467,
              "nodeType": "Block",
              "src": "17661:332:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 19448,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19443,
                            "name": "earningsRateOverride",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19437,
                            "src": "17697:20:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                              "typeString": "struct Decimal.D256 memory"
                            }
                          },
                          "id": 19444,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25949,
                          "src": "17697:26:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19445,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19433,
                              "src": "17727:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19446,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "riskLimits",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28759,
                            "src": "17727:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RiskLimits_$28725_storage",
                              "typeString": "struct Storage.RiskLimits storage ref"
                            }
                          },
                          "id": 19447,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "earningsRateMax",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28716,
                          "src": "17727:32:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "17697:62:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19449,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "17773:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4561726e696e67732072617465206f7665727269646520746f6f2068696768",
                        "id": 19450,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17791:33:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cb20b3cc4ae4070f6ddc1a66b301773ce4a087051407649d194180a05cf7c38e",
                          "typeString": "literal_string \"Earnings rate override too high\""
                        },
                        "value": "Earnings rate override too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cb20b3cc4ae4070f6ddc1a66b301773ce4a087051407649d194180a05cf7c38e",
                          "typeString": "literal_string \"Earnings rate override too high\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19440,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "17671:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "17671:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17671:163:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19452,
                  "nodeType": "ExpressionStatement",
                  "src": "17671:163:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19453,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19433,
                            "src": "17845:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19456,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "17845:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19457,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19455,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19435,
                          "src": "17859:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17845:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19458,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "earningsRateOverride",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28688,
                      "src": "17845:44:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_storage",
                        "typeString": "struct Decimal.D256 storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 19459,
                      "name": "earningsRateOverride",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19437,
                      "src": "17892:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                        "typeString": "struct Decimal.D256 memory"
                      }
                    },
                    "src": "17845:67:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage",
                      "typeString": "struct Decimal.D256 storage ref"
                    }
                  },
                  "id": 19461,
                  "nodeType": "ExpressionStatement",
                  "src": "17845:67:68"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19463,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19435,
                        "src": "17955:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19464,
                        "name": "earningsRateOverride",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19437,
                        "src": "17965:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                          "typeString": "struct Decimal.D256 memory"
                        }
                      ],
                      "id": 19462,
                      "name": "LogSetEarningsRateOverride",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18301,
                      "src": "17928:26:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_struct$_D256_$25950_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct Decimal.D256 memory)"
                      }
                    },
                    "id": 19465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17928:58:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19466,
                  "nodeType": "EmitStatement",
                  "src": "17923:63:68"
                }
              ]
            },
            "documentation": null,
            "id": 19468,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setEarningsRateOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19433,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19468,
                  "src": "17535:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19432,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "17535:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19435,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19468,
                  "src": "17572:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17572:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19437,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 19468,
                  "src": "17598:40:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19436,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "17598:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17525:119:68"
            },
            "returnParameters": {
              "id": 19439,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17661:0:68"
            },
            "scope": 19547,
            "src": "17492:501:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19501,
              "nodeType": "Block",
              "src": "18116:353:68",
              "statements": [
                {
                  "assignments": [
                    19476
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19476,
                      "name": "marketId",
                      "nodeType": "VariableDeclaration",
                      "scope": 19501,
                      "src": "18243:13:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 19475,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18243:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19481,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19477,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19470,
                        "src": "18259:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                          "typeString": "struct Storage.State storage pointer"
                        }
                      },
                      "id": 19478,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenToMarketId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28735,
                      "src": "18259:21:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 19480,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 19479,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19472,
                      "src": "18281:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18259:28:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18243:44:68"
                },
                {
                  "assignments": [
                    19483
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19483,
                      "name": "marketExists",
                      "nodeType": "VariableDeclaration",
                      "scope": 19501,
                      "src": "18297:17:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 19482,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18297:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19491,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 19490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 19484,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19472,
                      "src": "18317:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19485,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19470,
                            "src": "18326:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                              "typeString": "struct Storage.State storage pointer"
                            }
                          },
                          "id": 19486,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "markets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28731,
                          "src": "18326:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                            "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                          }
                        },
                        "id": 19488,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19487,
                          "name": "marketId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19476,
                          "src": "18340:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18326:23:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Market_$28689_storage",
                          "typeString": "struct Storage.Market storage ref"
                        }
                      },
                      "id": 19489,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28668,
                      "src": "18326:29:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18317:38:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18297:58:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "18392:13:68",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 19495,
                          "name": "marketExists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19483,
                          "src": "18393:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19497,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "18419:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d61726b657420657869737473",
                        "id": 19498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18437:15:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1d34539bb0696c661cd97fc7bcf8e161469a11090ce0456f3b1449a1180896cf",
                          "typeString": "literal_string \"Market exists\""
                        },
                        "value": "Market exists"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1d34539bb0696c661cd97fc7bcf8e161469a11090ce0456f3b1449a1180896cf",
                          "typeString": "literal_string \"Market exists\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19492,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "18366:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "18366:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 19499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18366:96:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19500,
                  "nodeType": "ExpressionStatement",
                  "src": "18366:96:68"
                }
              ]
            },
            "documentation": null,
            "id": 19502,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_requireNoMarket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19470,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19502,
                  "src": "18034:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19469,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "18034:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19472,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 19502,
                  "src": "18071:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19471,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18071:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18024:66:68"
            },
            "returnParameters": {
              "id": 19474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18116:0:68"
            },
            "scope": 19547,
            "src": "17999:470:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19531,
              "nodeType": "Block",
              "src": "18596:197:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 19525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 19515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 19512,
                            "name": "marketId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19506,
                            "src": "18632:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 19513,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19504,
                              "src": "18643:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                "typeString": "struct Storage.State storage pointer"
                              }
                            },
                            "id": 19514,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "numMarkets",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28727,
                            "src": "18643:16:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18632:27:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 19524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19516,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19504,
                                  "src": "18663:5:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                                    "typeString": "struct Storage.State storage pointer"
                                  }
                                },
                                "id": 19517,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "markets",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 28731,
                                "src": "18663:13:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Market_$28689_storage_$",
                                  "typeString": "mapping(uint256 => struct Storage.Market storage ref)"
                                }
                              },
                              "id": 19519,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 19518,
                                "name": "marketId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19506,
                                "src": "18677:8:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "18663:23:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Market_$28689_storage",
                                "typeString": "struct Storage.Market storage ref"
                              }
                            },
                            "id": 19520,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "token",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28668,
                            "src": "18663:29:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 19522,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "18704:1:68",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 19521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18696:7:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 19523,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18696:10:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "18663:43:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "18632:74:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19526,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18235,
                        "src": "18720:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206d61726b6574",
                        "id": 19527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18738:16:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_81e613bc1436d8cdfade9fbe523a11c66d5bc5d8dd94b93d7f736a1f9de2219f",
                          "typeString": "literal_string \"Invalid market\""
                        },
                        "value": "Invalid market"
                      },
                      {
                        "argumentTypes": null,
                        "id": 19528,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19506,
                        "src": "18768:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_81e613bc1436d8cdfade9fbe523a11c66d5bc5d8dd94b93d7f736a1f9de2219f",
                          "typeString": "literal_string \"Invalid market\""
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19509,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "18606:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 19511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27852,
                      "src": "18606:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32,uint256) pure"
                      }
                    },
                    "id": 19529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18606:180:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19530,
                  "nodeType": "ExpressionStatement",
                  "src": "18606:180:68"
                }
              ]
            },
            "documentation": null,
            "id": 19532,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validateMarketId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19504,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 19532,
                  "src": "18511:27:68",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                    "typeString": "struct Storage.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19503,
                    "name": "Storage.State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28760,
                    "src": "18511:13:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$28760_storage_ptr",
                      "typeString": "struct Storage.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19506,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 19532,
                  "src": "18548:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19505,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18548:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18501:69:68"
            },
            "returnParameters": {
              "id": 19508,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18596:0:68"
            },
            "scope": 19547,
            "src": "18475:318:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 19545,
              "nodeType": "Block",
              "src": "18923:105:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19541,
                        "name": "_accountOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19534,
                        "src": "18974:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19009:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 19539,
                        "name": "Account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24885,
                        "src": "18940:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Account_$24885_$",
                          "typeString": "type(library Account)"
                        }
                      },
                      "id": 19540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Info",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24851,
                      "src": "18940:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Info_$24851_storage_ptr_$",
                        "typeString": "type(struct Account.Info storage pointer)"
                      }
                    },
                    "id": 19543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "owner",
                      "number"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "18940:81:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_memory",
                      "typeString": "struct Account.Info memory"
                    }
                  },
                  "functionReturnParameters": 19538,
                  "id": 19544,
                  "nodeType": "Return",
                  "src": "18933:88:68"
                }
              ]
            },
            "documentation": null,
            "id": 19546,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getDefaultAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19534,
                  "name": "_accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 19546,
                  "src": "18836:21:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19533,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18836:7:68",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18826:37:68"
            },
            "returnParameters": {
              "id": 19538,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19537,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19546,
                  "src": "18898:19:68",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19536,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "18898:12:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18897:21:68"
            },
            "scope": 19547,
            "src": "18799:229:68",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 19548,
        "src": "1630:17400:68"
      }
    ],
    "src": "603:18428:68"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.23",
  "updatedAt": "2026-03-02T16:38:28.812Z",
  "devdoc": {
    "author": "dYdX * Administrative functions to keep the protocol updated",
    "methods": {},
    "title": "AdminImpl"
  },
  "userdoc": {
    "methods": {}
  }
}