{
  "contractName": "FuseFaucet",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "_admins",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_toppingAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_toppingTimes",
          "type": "uint256"
        },
        {
          "internalType": "contract Identity",
          "name": "_identity",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address payable[]",
          "name": "admins",
          "type": "address[]"
        }
      ],
      "name": "AdminsAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address[]",
          "name": "admins",
          "type": "address[]"
        }
      ],
      "name": "AdminsRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_success",
          "type": "bool"
        }
      ],
      "name": "GenericCall",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "WalletTopped",
      "type": "event"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "adminToppingAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentDay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "periodStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "toppingAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "toppingTimes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract SignUpBonus",
          "name": "_bonus",
          "type": "address"
        }
      ],
      "name": "setBonusContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "_admins",
          "type": "address[]"
        }
      ],
      "name": "addAdmins",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_admins",
          "type": "address[]"
        }
      ],
      "name": "removeAdmins",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "startIndex",
          "type": "uint256"
        }
      ],
      "name": "topAdmins",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "startIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endIndex",
          "type": "uint256"
        }
      ],
      "name": "topAdmins",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "isAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_did",
          "type": "string"
        }
      ],
      "name": "whitelist",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "removeWhitelist",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "blacklist",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "removeBlacklist",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "topWallet",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "_did",
          "type": "string"
        }
      ],
      "name": "whitelistAndAwardUser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "awardUser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "genericCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "returnValue",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "destroy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"_admins\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_toppingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_toppingTimes\",\"type\":\"uint256\"},{\"internalType\":\"contract Identity\",\"name\":\"_identity\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address payable[]\",\"name\":\"admins\",\"type\":\"address[]\"}],\"name\":\"AdminsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address[]\",\"name\":\"admins\",\"type\":\"address[]\"}],\"name\":\"AdminsRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"name\":\"GenericCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WalletTopped\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"_admins\",\"type\":\"address[]\"}],\"name\":\"addAdmins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"adminToppingAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"awardUser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"blacklist\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentDay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"destroy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"genericCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"periodStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_admins\",\"type\":\"address[]\"}],\"name\":\"removeAdmins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"removeBlacklist\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"removeWhitelist\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract SignUpBonus\",\"name\":\"_bonus\",\"type\":\"address\"}],\"name\":\"setBonusContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endIndex\",\"type\":\"uint256\"}],\"name\":\"topAdmins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"}],\"name\":\"topAdmins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"topWallet\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"toppingAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"toppingTimes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_did\",\"type\":\"string\"}],\"name\":\"whitelist\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_did\",\"type\":\"string\"}],\"name\":\"whitelistAndAwardUser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"awardUser(address,uint256)\":{\"details\":\"Function to award user with pending bonuses, can only be done by admin\",\"params\":{\"_amount\":\"the bonus amount to give\",\"_user\":\"The address to transfer to and whitelist\"}},\"destroy()\":{\"details\":\"destroy wallet and return funds to owner\"},\"genericCall(address,bytes,uint256)\":{\"details\":\"perform a generic call to an arbitrary contract\",\"params\":{\"_contract\":\"the contract's address to call\",\"_data\":\"ABI-encoded contract call to call `_contract` address.\",\"_value\":\"value (ETH) to transfer with the transaction\"},\"return\":\"bool    success or fail        bytes - the return bytes of the called contract's function.\"},\"isAdmin(address)\":{\"details\":\"Function to check if given address is an admin\",\"params\":{\"_user\":\"the address to check\"},\"return\":\"A bool indicating if user is an admin\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"topAdmins(uint256,uint256)\":{\"details\":\"top admins\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}}}},\"userdoc\":{\"methods\":{\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/fuseFaucet/FuseFaucet.sol\":\"FuseFaucet\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol\":{\"keccak256\":\"0xd6b17fe8c789a03e87c80046319caee9fc9c9b5ded9008b09a550027c205c5ab\",\"urls\":[\"bzz-raw://0f77e8dc5f6abeefc9a2e185c257516f7f0266ae2781dd67c18daf1aac667daf\",\"dweb:/ipfs/QmbeRqLP2MvTZifqPBSK3PUDh8TjC1RaTA8b1dRRAXahmJ\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeeFormula.sol\":{\"keccak256\":\"0x2ac93f891a65aa60b93e2b27552850dfa459b88f5a19edc29bb5bab0cc4f3eaa\",\"urls\":[\"bzz-raw://bddb94bc0230d959d2362887a253a47b91f0de6804cba8e4569a7cac47c39b5a\",\"dweb:/ipfs/QmTdkPQHRdzxJ7D7pi9cowLgYY9wVja416dhBwCsdtPEv5\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol\":{\"keccak256\":\"0x7c542d44cbd864ee0ddecbc5016d9d7eb9ce65ab463fdd9f21eb8ce3c6ffc8ea\",\"urls\":[\"bzz-raw://4753dd823c0b0cbe7d7d02e1df64ace07d7a163af3aaff12697aee70a1b45f2f\",\"dweb:/ipfs/QmPkKeH88M3f6UbHphayUbjEBNV4rmoogtDmVundzBKbFK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FormulaHolder.sol\":{\"keccak256\":\"0xb3c0d3bc21e71497784e1be11698ff501ee11545c3106bec2cae2e8af1bacd9b\",\"urls\":[\"bzz-raw://783b4e28b67231de0fbbe48e58f43f69db3f98fd7f75668edce145a55a9b5b17\",\"dweb:/ipfs/QmdeyRfeix3PGfaXqtRQpH1sjmjFpdtuGaPwnvRn7nHAWd\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SignUpBonus.sol\":{\"keccak256\":\"0x4c6d8bf9908fc2a6f154dc078ae10efe3a1ed857353ff4210709343193659d4b\",\"urls\":[\"bzz-raw://2ed80b2d465037419c1e1d007e8fd6b9512f33e4ef264479a922212f28e769fa\",\"dweb:/ipfs/QmQfKqSR5qkNSgDV6ai9pxrvKjoEVFacnzWY2nA7mcuFpm\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/fuseFaucet/FuseFaucet.sol\":{\"keccak256\":\"0x92b31eecf315c656891ed76b64ae871f8860c8b9de9f62921c7e613ca97f3b53\",\"urls\":[\"bzz-raw://322bfdde25853874a723bdd8064dff91e8ff35c0d3064eb161070604d205635a\",\"dweb:/ipfs/QmPvneizZHXCjbVURkhEtKNb9gQxfrW3CtEyvfshPJk8xT\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":{\"keccak256\":\"0x282184478f1d618d3523b28a84a7f7003dfdc99cad120e5e358d2cce1f5fb491\",\"urls\":[\"bzz-raw://67e17ecb57b24c4fb801abc2c52c3148af3b967e28da4fb7e074d18efb7a57c1\",\"dweb:/ipfs/QmfZ8jXhdTHtxr3gfByRj4HnXnGynX7SLZWWGR8k768aGB\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityGuard.sol\":{\"keccak256\":\"0xcc395c0e8f812201b5ed1f45e7272120ee5ffe73bfe13e325dfd872aef235b22\",\"urls\":[\"bzz-raw://58f93e4b9f48ec31ac151208e4f9e6b356cc23dfc9585d846bc09bf35d6ff7be\",\"dweb:/ipfs/QmdxJHUCaFx8N66kkDhYdA4k6d2V91yBRG6sombuPxBq7X\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677.sol\":{\"keccak256\":\"0x8360b9e356df8584d95990bb7e772342b30d9e22b160f7c875fbca5c0b87453c\",\"urls\":[\"bzz-raw://97cc6e5586cedcd49462cc465a2a8fc5063d7ec6cb9533f4e0099969a75bd4b2\",\"dweb:/ipfs/QmXw6y4iXfqyJHDRrHdd5ofQ6E4cuHDw4LiYupReJ1rCBc\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol\":{\"keccak256\":\"0xc5683b28527097379ed090b28bb46e17a50a2c57ddcb3c7e028fcd04ddc64aef\",\"urls\":[\"bzz-raw://639f6b6cf65382faea738e6326d6aeb289b8b030cf02f40c54bc45ec098eda6d\",\"dweb:/ipfs/QmQi7dFcKiwUxSbzhus4CxFTdNJvUsfiqY6i3bD4RdMQrn\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677BridgeToken.sol\":{\"keccak256\":\"0x014fa09dca773b1406855e628687be50c1eb129894f45a8b5c9fc709d826968d\",\"urls\":[\"bzz-raw://23c6491c0c26471315010687d785a3724ae33198be6ed39828d1a4f7e6873cb4\",\"dweb:/ipfs/QmW62FXHtLdNGzB8Nq9XwmwHp6Jn8jgbAVyrU2j7c7w6By\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677Token.sol\":{\"keccak256\":\"0x553a103b911d77cecb2ce3f355b2370c4a23eb070593d7c8eb46f33e3a5ff141\",\"urls\":[\"bzz-raw://e37438ce280964498b77f63bbe4d1f25c55ff4c178925447a70decceda06e46c\",\"dweb:/ipfs/QmbqCLhWjZqpFBnUVb3H7LkEbAaVmhf76Ln14oWnGimYGM\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol\":{\"keccak256\":\"0x7b91359f6912641c7dbfeced9a5c47454acce7c2cab9205d00b8049d228d7b78\",\"urls\":[\"bzz-raw://3a09bc6936d0179e2e5be2687446532d63135bc537f7ab246c6a1101d4849c1f\",\"dweb:/ipfs/QmNshqF7Xu7UX8BryKYRbnRQdTfytPappxkHq5xMxF5vpE\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/MinterRole.sol\":{\"keccak256\":\"0x3199053db04cdae6c9b4380921a4a4ee720b568d6a9660883b29d25fbec31bc0\",\"urls\":[\"bzz-raw://1b0ff368e21d6007c06e4cfb286fe59d7d7d3ec06283300c9be2153ba11fa93a\",\"dweb:/ipfs/QmRPq2wZM4RAcbj31dP34GCr1CSy2qy3JqfXEkdVie4HLT\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]},\"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzz-raw://bbdbf9d3754fcdcc85aec0432fabcec914317b1c2081b43753442ed53853a34a\",\"dweb:/ipfs/QmVHWQBn5xQkQEHhyGNEeS5gjjALZEk5ZfcjFt7kL6MoLy\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0x37b840977505e5f6d74bc8fa3d0217facc7913d0ecf064da3e3b26494acd37de\",\"urls\":[\"bzz-raw://7456513521bae915089dfd5879b685e47f3f180ad9ffe24cc3b19275b1da28ed\",\"dweb:/ipfs/QmbM1avKkyyTHEeTs3CqheyZwgAMNzVi3iDudqBdUJ2WPM\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x6080604052600480546001600160a01b03191690553480156200002157600080fd5b5060405162001be038038062001be0833981810160405260808110156200004757600080fd5b81019080805160405193929190846401000000008211156200006857600080fd5b9083019060208201858111156200007e57600080fd5b82518660208202830111640100000000821117156200009c57600080fd5b82525081516020918201928201910280838360005b83811015620000cb578181015183820152602001620000b1565b50505050919091016040818152602084015190840151606090940151600080546001600160a01b0319163317808255929750949550936001600160a01b03919091169250907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600380546001600160a01b0319166001600160a01b0383161790556005839055661ff973cafa8000600655600782905542600955835115620001855762000185846001600160e01b036200018f16565b505050506200034c565b620001a26001600160e01b03620002ac16565b620001ac57600080fd5b60005b81518110156200023d57620001e8828281518110620001ca57fe5b60200260200101516001620002bd60201b6200172f1790919060201c565b6002828281518110620001f757fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501620001af565b508060405180828051906020019060200280838360005b838110156200026e57818101518382015260200162000254565b505060405194909201849003842095507f45486b220020cc2482ad1a5e0ae4d5f0b5372cea1b48173f6273c616a5047269945060009392505050a250565b6000546001600160a01b0316331490565b6001600160a01b038116620002d157600080fd5b620002e682826001600160e01b036200031616565b15620002f157600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200032c57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b611884806200035c6000396000f3fe60806040526004361061014b5760003560e01c80638f32d59b116100b6578063e6ea39391161006f578063e6ea393914610795578063eb91e651146107aa578063eda4e6d6146107dd578063f2fde38b146107f2578063f3da9f0514610825578063f9f92be41461083a5761014b565b80638f32d59b146106275780639c54df641461063c578063bd7fbbd6146106ea578063c489249614610723578063db62683814610738578063e2166c64146107625761014b565b80635c9302c9116101085780635c9302c9146105425780635fc944e914610569578063715018a61461059957806378c8cda7146105ae57806383197ef0146105e15780638da5cb5b146105f65761014b565b80631ff6e09f1461014d57806324d7806c146102135780632beeaca41461025a5780632bf164581461031b5780633771dcf814610461578063377e11e014610494575b005b34801561015957600080fd5b5061014b6004803603606081101561017057600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561019f57600080fd5b8201836020820111156101b157600080fd5b803590602001918460018302840111600160201b831117156101d257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061086d945050505050565b34801561021f57600080fd5b506102466004803603602081101561023657600080fd5b50356001600160a01b0316610a3e565b604080519115158252519081900360200190f35b34801561026657600080fd5b5061014b6004803603604081101561027d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102a757600080fd5b8201836020820111156102b957600080fd5b803590602001918460018302840111600160201b831117156102da57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a57945050505050565b34801561032757600080fd5b506103de6004803603606081101561033e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561036857600080fd5b82018360208201111561037a57600080fd5b803590602001918460018302840111600160201b8311171561039b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610bb2915050565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042557818101518382015260200161040d565b50505050905090810190601f1680156104525780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561046d57600080fd5b5061014b6004803603602081101561048457600080fd5b50356001600160a01b0316610da6565b3480156104a057600080fd5b5061014b600480360360208110156104b757600080fd5b810190602081018135600160201b8111156104d157600080fd5b8201836020820111156104e357600080fd5b803590602001918460208302840111600160201b8311171561050457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ece945050505050565b34801561054e57600080fd5b50610557610f87565b60408051918252519081900360200190f35b34801561057557600080fd5b5061014b6004803603604081101561058c57600080fd5b5080359060200135610f8d565b3480156105a557600080fd5b5061014b611073565b3480156105ba57600080fd5b5061014b600480360360208110156105d157600080fd5b50356001600160a01b03166110ce565b3480156105ed57600080fd5b5061014b611199565b34801561060257600080fd5b5061060b6111ad565b604080516001600160a01b039092168252519081900360200190f35b34801561063357600080fd5b506102466111bc565b34801561064857600080fd5b5061014b6004803603602081101561065f57600080fd5b810190602081018135600160201b81111561067957600080fd5b82018360208201111561068b57600080fd5b803590602001918460208302840111600160201b831117156106ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506111cd945050505050565b3480156106f657600080fd5b5061014b6004803603604081101561070d57600080fd5b506001600160a01b0381351690602001356112d1565b34801561072f57600080fd5b506105576113db565b34801561074457600080fd5b5061014b6004803603602081101561075b57600080fd5b50356113e1565b34801561076e57600080fd5b5061014b6004803603602081101561078557600080fd5b50356001600160a01b03166113ee565b3480156107a157600080fd5b50610557611421565b3480156107b657600080fd5b5061014b600480360360208110156107cd57600080fd5b50356001600160a01b0316611427565b3480156107e957600080fd5b506105576114c5565b3480156107fe57600080fd5b5061014b6004803603602081101561081557600080fd5b50356001600160a01b03166114cb565b34801561083157600080fd5b506105576114e5565b34801561084657600080fd5b5061014b6004803603602081101561085d57600080fd5b50356001600160a01b03166114eb565b61087633610a3e565b6108bd576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b6004546001600160a01b03166109045760405162461bcd60e51b81526004018080602001828103825260218152602001806117ff6021913960400191505060405180910390fd5b60035460408051633af32abf60e01b81526001600160a01b03868116600483015291519190921691633af32abf916024808301926020929190829003018186803b15801561095157600080fd5b505afa158015610965573d6000803e3d6000fd5b505050506040513d602081101561097b57600080fd5b505161098b5761098b8382610a57565b8115610a03576004805460408051635ebfddeb60e11b81526001600160a01b0387811694820194909452602481018690529051929091169163bd7fbbd69160448082019260009290919082900301818387803b1580156109ea57600080fd5b505af11580156109fe573d6000803e3d6000fd5b505050505b600654610a1790600263ffffffff61158916565b333111801590610a2b5750610a2b33610a3e565b15610a3957610a39336115ab565b505050565b6000610a5160018363ffffffff61168c16565b92915050565b610a6033610a3e565b610aa7576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b60035460408051631b02709960e01b81526001600160a01b0385811660048301908152602483019384528551604484015285519190941693631b0270999387938793606490910190602085019080838360005b83811015610b12578181015183820152602001610afa565b50505050905090810190601f168015610b3f5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610b5f57600080fd5b505af1158015610b73573d6000803e3d6000fd5b5050600654610b8c92509050600263ffffffff61158916565b333111801590610ba05750610ba033610a3e565b15610bae57610bae336115ab565b5050565b60006060610bbf33610a3e565b610c06576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b846001600160a01b031683856040518082805190602001908083835b60208310610c415780518252601f199092019160209182019101610c22565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610ca3576040519150601f19603f3d011682016040523d82523d6000602084013e610ca8565b606091505b508092508193505050846001600160a01b03167f534b52c783549f909f9e743120524d0b7154058e4a54cdc895c2c0b587a1c7e0858585604051808060200184815260200183151515158152602001828103825285818151815260200191508051906020019080838360005b83811015610d2c578181015183820152602001610d14565b50505050905090810190601f168015610d595780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600654610d7c90600263ffffffff61158916565b333111801590610d905750610d9033610a3e565b15610d9e57610d9e336115ab565b935093915050565b610daf33610a3e565b610df6576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b610dfe6116c1565b6007546008546000908152600a602090815260408083206001600160a01b038616845290915290205410610e635760405162461bcd60e51b81526004018080602001828103825260308152602001806118206030913960400191505060405180910390fd5b600554610e7790600463ffffffff61158916565b816001600160a01b03163110610e8c57610e95565b610e95816115ab565b600654610ea990600263ffffffff61158916565b333111801590610ebd5750610ebd33610a3e565b15610ecb57610ecb336115ab565b50565b610ed66111bc565b610edf57600080fd5b60005b8151811015610f1a57610f12828281518110610efa57fe5b602002602001015160016116e790919063ffffffff16565b600101610ee2565b508060405180828051906020019060200280838360005b83811015610f49578181015183820152602001610f31565b505060405194909201849003842095507fd5e6894641b5030a67e637ab2e12da64d8aec689f8bd1328de2b04d6a439c810945060009392505050a250565b60085481565b6002548210610fd9576040805162461bcd60e51b815260206004820152601360248201527241646d696e206c69737420697320656d70747960681b604482015290519081900360640190fd5b815b60025481108015610feb57508181105b1561105e5760065461100490600263ffffffff61158916565b6002828154811061101157fe5b6000918252602090912001546001600160a01b03163111611056576110566002828154811061103c57fe5b6000918252602090912001546001600160a01b03166115ab565b600101610fdb565b50600654610b8c90600263ffffffff61158916565b61107b6111bc565b61108457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6110d733610a3e565b61111e576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b6003546040805163291d954960e01b81526001600160a01b0384811660048301529151919092169163291d954991602480830192600092919082900301818387803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b5050600654610ea992509050600263ffffffff61158916565b6111a16111bc565b6111aa57600080fd5b33ff5b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6111d56111bc565b6111de57600080fd5b60005b8151811015611264576112118282815181106111f957fe5b6020026020010151600161172f90919063ffffffff16565b600282828151811061121f57fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b0390931692909217909155016111e1565b508060405180828051906020019060200280838360005b8381101561129357818101518382015260200161127b565b505060405194909201849003842095507f45486b220020cc2482ad1a5e0ae4d5f0b5372cea1b48173f6273c616a5047269945060009392505050a250565b6112da33610a3e565b611321576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b6004546001600160a01b03166113685760405162461bcd60e51b81526004018080602001828103825260218152602001806117ff6021913960400191505060405180910390fd5b80156113c7576004805460408051635ebfddeb60e11b81526001600160a01b0386811694820194909452602481018590529051929091169163bd7fbbd69160448082019260009290919082900301818387803b158015610b5f57600080fd5b600654610b8c90600263ffffffff61158916565b60065481565b610e958182603201610f8d565b6113f66111bc565b6113ff57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60055481565b61143033610a3e565b611477576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b600354604080516363513b6160e11b81526001600160a01b0384811660048301529151919092169163c6a276c291602480830192600092919082900301818387803b15801561116c57600080fd5b60095481565b6114d36111bc565b6114dc57600080fd5b610ecb8161177b565b60075481565b6114f433610a3e565b61153b576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b60035460408051630c477e0b60e11b81526001600160a01b0384811660048301529151919092169163188efc1691602480830192600092919082900301818387803b15801561116c57600080fd5b600080821161159757600080fd5b60008284816115a257fe5b04949350505050565b6008546000908152600a602090815260408083206001600160a01b03851684529091528120805460010190556115e082610a3e565b6115ec576005546115f0565b6006545b9050600061160e826001600160a01b0385163163ffffffff6117e916565b6040519091506001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611647573d6000803e3d6000fd5b506040805182815290516001600160a01b038516917ff60e56b8021f6ac77bd50d4acdbed9ad9e85107144d43090774a9ebe5ffed985919081900360200190a2505050565b60006001600160a01b0382166116a157600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b620151806116da600954426117e990919063ffffffff16565b816116e157fe5b04600855565b6001600160a01b0381166116fa57600080fd5b611704828261168c565b61170d57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b03811661174257600080fd5b61174c828261168c565b1561175657600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b03811661178e57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156117f857600080fd5b5090039056fe5369676e557020626f6e757320686173206e6f74206265656e2073657420796574557365722077616c6c657420686173206265656e20746f7070656420746f6f206d616e792074696d657320746f646179a265627a7a723158207ac10bf4b08da9e4e2e639b0468ad91e097f630a3598ddd5532390ec324e8bb664736f6c63430005100032",
  "deployedBytecode": "0x60806040526004361061014b5760003560e01c80638f32d59b116100b6578063e6ea39391161006f578063e6ea393914610795578063eb91e651146107aa578063eda4e6d6146107dd578063f2fde38b146107f2578063f3da9f0514610825578063f9f92be41461083a5761014b565b80638f32d59b146106275780639c54df641461063c578063bd7fbbd6146106ea578063c489249614610723578063db62683814610738578063e2166c64146107625761014b565b80635c9302c9116101085780635c9302c9146105425780635fc944e914610569578063715018a61461059957806378c8cda7146105ae57806383197ef0146105e15780638da5cb5b146105f65761014b565b80631ff6e09f1461014d57806324d7806c146102135780632beeaca41461025a5780632bf164581461031b5780633771dcf814610461578063377e11e014610494575b005b34801561015957600080fd5b5061014b6004803603606081101561017057600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561019f57600080fd5b8201836020820111156101b157600080fd5b803590602001918460018302840111600160201b831117156101d257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061086d945050505050565b34801561021f57600080fd5b506102466004803603602081101561023657600080fd5b50356001600160a01b0316610a3e565b604080519115158252519081900360200190f35b34801561026657600080fd5b5061014b6004803603604081101561027d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102a757600080fd5b8201836020820111156102b957600080fd5b803590602001918460018302840111600160201b831117156102da57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a57945050505050565b34801561032757600080fd5b506103de6004803603606081101561033e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561036857600080fd5b82018360208201111561037a57600080fd5b803590602001918460018302840111600160201b8311171561039b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610bb2915050565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042557818101518382015260200161040d565b50505050905090810190601f1680156104525780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561046d57600080fd5b5061014b6004803603602081101561048457600080fd5b50356001600160a01b0316610da6565b3480156104a057600080fd5b5061014b600480360360208110156104b757600080fd5b810190602081018135600160201b8111156104d157600080fd5b8201836020820111156104e357600080fd5b803590602001918460208302840111600160201b8311171561050457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ece945050505050565b34801561054e57600080fd5b50610557610f87565b60408051918252519081900360200190f35b34801561057557600080fd5b5061014b6004803603604081101561058c57600080fd5b5080359060200135610f8d565b3480156105a557600080fd5b5061014b611073565b3480156105ba57600080fd5b5061014b600480360360208110156105d157600080fd5b50356001600160a01b03166110ce565b3480156105ed57600080fd5b5061014b611199565b34801561060257600080fd5b5061060b6111ad565b604080516001600160a01b039092168252519081900360200190f35b34801561063357600080fd5b506102466111bc565b34801561064857600080fd5b5061014b6004803603602081101561065f57600080fd5b810190602081018135600160201b81111561067957600080fd5b82018360208201111561068b57600080fd5b803590602001918460208302840111600160201b831117156106ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506111cd945050505050565b3480156106f657600080fd5b5061014b6004803603604081101561070d57600080fd5b506001600160a01b0381351690602001356112d1565b34801561072f57600080fd5b506105576113db565b34801561074457600080fd5b5061014b6004803603602081101561075b57600080fd5b50356113e1565b34801561076e57600080fd5b5061014b6004803603602081101561078557600080fd5b50356001600160a01b03166113ee565b3480156107a157600080fd5b50610557611421565b3480156107b657600080fd5b5061014b600480360360208110156107cd57600080fd5b50356001600160a01b0316611427565b3480156107e957600080fd5b506105576114c5565b3480156107fe57600080fd5b5061014b6004803603602081101561081557600080fd5b50356001600160a01b03166114cb565b34801561083157600080fd5b506105576114e5565b34801561084657600080fd5b5061014b6004803603602081101561085d57600080fd5b50356001600160a01b03166114eb565b61087633610a3e565b6108bd576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b6004546001600160a01b03166109045760405162461bcd60e51b81526004018080602001828103825260218152602001806117ff6021913960400191505060405180910390fd5b60035460408051633af32abf60e01b81526001600160a01b03868116600483015291519190921691633af32abf916024808301926020929190829003018186803b15801561095157600080fd5b505afa158015610965573d6000803e3d6000fd5b505050506040513d602081101561097b57600080fd5b505161098b5761098b8382610a57565b8115610a03576004805460408051635ebfddeb60e11b81526001600160a01b0387811694820194909452602481018690529051929091169163bd7fbbd69160448082019260009290919082900301818387803b1580156109ea57600080fd5b505af11580156109fe573d6000803e3d6000fd5b505050505b600654610a1790600263ffffffff61158916565b333111801590610a2b5750610a2b33610a3e565b15610a3957610a39336115ab565b505050565b6000610a5160018363ffffffff61168c16565b92915050565b610a6033610a3e565b610aa7576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b60035460408051631b02709960e01b81526001600160a01b0385811660048301908152602483019384528551604484015285519190941693631b0270999387938793606490910190602085019080838360005b83811015610b12578181015183820152602001610afa565b50505050905090810190601f168015610b3f5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610b5f57600080fd5b505af1158015610b73573d6000803e3d6000fd5b5050600654610b8c92509050600263ffffffff61158916565b333111801590610ba05750610ba033610a3e565b15610bae57610bae336115ab565b5050565b60006060610bbf33610a3e565b610c06576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b846001600160a01b031683856040518082805190602001908083835b60208310610c415780518252601f199092019160209182019101610c22565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610ca3576040519150601f19603f3d011682016040523d82523d6000602084013e610ca8565b606091505b508092508193505050846001600160a01b03167f534b52c783549f909f9e743120524d0b7154058e4a54cdc895c2c0b587a1c7e0858585604051808060200184815260200183151515158152602001828103825285818151815260200191508051906020019080838360005b83811015610d2c578181015183820152602001610d14565b50505050905090810190601f168015610d595780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600654610d7c90600263ffffffff61158916565b333111801590610d905750610d9033610a3e565b15610d9e57610d9e336115ab565b935093915050565b610daf33610a3e565b610df6576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b610dfe6116c1565b6007546008546000908152600a602090815260408083206001600160a01b038616845290915290205410610e635760405162461bcd60e51b81526004018080602001828103825260308152602001806118206030913960400191505060405180910390fd5b600554610e7790600463ffffffff61158916565b816001600160a01b03163110610e8c57610e95565b610e95816115ab565b600654610ea990600263ffffffff61158916565b333111801590610ebd5750610ebd33610a3e565b15610ecb57610ecb336115ab565b50565b610ed66111bc565b610edf57600080fd5b60005b8151811015610f1a57610f12828281518110610efa57fe5b602002602001015160016116e790919063ffffffff16565b600101610ee2565b508060405180828051906020019060200280838360005b83811015610f49578181015183820152602001610f31565b505060405194909201849003842095507fd5e6894641b5030a67e637ab2e12da64d8aec689f8bd1328de2b04d6a439c810945060009392505050a250565b60085481565b6002548210610fd9576040805162461bcd60e51b815260206004820152601360248201527241646d696e206c69737420697320656d70747960681b604482015290519081900360640190fd5b815b60025481108015610feb57508181105b1561105e5760065461100490600263ffffffff61158916565b6002828154811061101157fe5b6000918252602090912001546001600160a01b03163111611056576110566002828154811061103c57fe5b6000918252602090912001546001600160a01b03166115ab565b600101610fdb565b50600654610b8c90600263ffffffff61158916565b61107b6111bc565b61108457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6110d733610a3e565b61111e576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b6003546040805163291d954960e01b81526001600160a01b0384811660048301529151919092169163291d954991602480830192600092919082900301818387803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b5050600654610ea992509050600263ffffffff61158916565b6111a16111bc565b6111aa57600080fd5b33ff5b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6111d56111bc565b6111de57600080fd5b60005b8151811015611264576112118282815181106111f957fe5b6020026020010151600161172f90919063ffffffff16565b600282828151811061121f57fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b0390931692909217909155016111e1565b508060405180828051906020019060200280838360005b8381101561129357818101518382015260200161127b565b505060405194909201849003842095507f45486b220020cc2482ad1a5e0ae4d5f0b5372cea1b48173f6273c616a5047269945060009392505050a250565b6112da33610a3e565b611321576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b6004546001600160a01b03166113685760405162461bcd60e51b81526004018080602001828103825260218152602001806117ff6021913960400191505060405180910390fd5b80156113c7576004805460408051635ebfddeb60e11b81526001600160a01b0386811694820194909452602481018590529051929091169163bd7fbbd69160448082019260009290919082900301818387803b158015610b5f57600080fd5b600654610b8c90600263ffffffff61158916565b60065481565b610e958182603201610f8d565b6113f66111bc565b6113ff57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60055481565b61143033610a3e565b611477576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b600354604080516363513b6160e11b81526001600160a01b0384811660048301529151919092169163c6a276c291602480830192600092919082900301818387803b15801561116c57600080fd5b60095481565b6114d36111bc565b6114dc57600080fd5b610ecb8161177b565b60075481565b6114f433610a3e565b61153b576040805162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b60035460408051630c477e0b60e11b81526001600160a01b0384811660048301529151919092169163188efc1691602480830192600092919082900301818387803b15801561116c57600080fd5b600080821161159757600080fd5b60008284816115a257fe5b04949350505050565b6008546000908152600a602090815260408083206001600160a01b03851684529091528120805460010190556115e082610a3e565b6115ec576005546115f0565b6006545b9050600061160e826001600160a01b0385163163ffffffff6117e916565b6040519091506001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611647573d6000803e3d6000fd5b506040805182815290516001600160a01b038516917ff60e56b8021f6ac77bd50d4acdbed9ad9e85107144d43090774a9ebe5ffed985919081900360200190a2505050565b60006001600160a01b0382166116a157600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b620151806116da600954426117e990919063ffffffff16565b816116e157fe5b04600855565b6001600160a01b0381166116fa57600080fd5b611704828261168c565b61170d57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b03811661174257600080fd5b61174c828261168c565b1561175657600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b03811661178e57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156117f857600080fd5b5090039056fe5369676e557020626f6e757320686173206e6f74206265656e2073657420796574557365722077616c6c657420686173206265656e20746f7070656420746f6f206d616e792074696d657320746f646179a265627a7a723158207ac10bf4b08da9e4e2e639b0468ad91e097f630a3598ddd5532390ec324e8bb664736f6c63430005100032",
  "sourceMap": "375:7818:24:-;;;567:34;;;-1:-1:-1;;;;;;567:34:24;;;1145:456;5:2:-1;;;;30:1;27;20:12;5:2;1145:456:24;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1145:456:24;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;1145:456:24;;421:4:-1;412:14;;;;1145:456:24;;;;;412:14:-1;1145:456:24;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;1145:456:24;;;;;;;;;;;;;;;;;;;;;515:6:70;:19;;-1:-1:-1;;;;;;515:19:70;524:10;515:19;;;;1145:456:24;;-1:-1:-1;1145:456:24;;-1:-1:-1;1145:456:24;-1:-1:-1;;;;;582:6:70;;;;;-1:-1:-1;515:6:70;549:40;;515:6;;549:40;1313:8:24;:20;;-1:-1:-1;;;;;;1313:20:24;-1:-1:-1;;;;;1313:20:24;;;;;1344:13;:30;;;1405:9;1384:18;:30;1462:12;:28;;;1514:3;1500:11;:17;1532:14;;:18;1528:67;;1566:18;1576:7;-1:-1:-1;;;;;1566:9:24;:18;:::i;:::-;1145:456;;;;375:7818;;2417:254;863:9:70;-1:-1:-1;;;;;863:7:70;:9;:::i;:::-;855:18;;;;;;2502:9:24;2497:133;2521:7;:14;2517:1;:18;2497:133;;;2556:22;2567:7;2575:1;2567:10;;;;;;;;;;;;;;2556:6;:10;;;;;;:22;;;;:::i;:::-;2593:9;2608:7;2616:1;2608:10;;;;;;;;;;;;;;;;;;;27::-1;;39:1;23:18;;;45:23;;-1:-1;2593:26:24;;;;;;;;;;;;-1:-1:-1;;;;;;2593:26:24;-1:-1:-1;;;;;2593:26:24;;;;;;;;;;2537:3;2497:133;;;;2656:7;2644:20;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;2644:20:24;;;;;;;;;;;;-1:-1:-1;2644:20:24;;-1:-1:-1;2644:20:24;;;-1:-1:-1;;;2644:20:24;2417:254;:::o;979:90:70:-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:70;1042:10;:20;;979:90::o;259:181:63:-;-1:-1:-1;;;;;335:21:63;;327:30;;;;;;376:18;380:4;386:7;-1:-1:-1;;;;;376:3:63;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:63;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:63;429:4;406:27;;;259:181::o;786:162::-;858:4;-1:-1:-1;;;;;882:21:63;;874:30;;;;;;-1:-1:-1;;;;;;921:20:63;:11;:20;;;;;;;;;;;;;;;786:162::o;375:7818:24:-;;;;;;;",
  "deployedSourceMap": "375:7818:24:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6387:413;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6387:413:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;6387:413:24;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6387:413:24;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6387:413:24;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6387:413:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6387:413:24;;-1:-1:-1;6387:413:24;;-1:-1:-1;;;;;6387:413:24:i;3818:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3818:100:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3818:100:24;-1:-1:-1;;;;;3818:100:24;;:::i;:::-;;;;;;;;;;;;;;;;;;4086:144;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4086:144:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;4086:144:24;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4086:144:24;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4086:144:24;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4086:144:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4086:144:24;;-1:-1:-1;4086:144:24;;-1:-1:-1;;;;;4086:144:24:i;7662:377::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7662:377:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;7662:377:24;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;7662:377:24;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7662:377:24;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7662:377:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;7662:377:24;;-1:-1:-1;;7662:377:24;;;-1:-1:-1;7662:377:24;;-1:-1:-1;;7662:377:24:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7662:377:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5323:340;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5323:340:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5323:340:24;-1:-1:-1;;;;;5323:340:24;;:::i;2847:213::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2847:213:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2847:213:24;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2847:213:24;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2847:213:24;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2847:213:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2847:213:24;;-1:-1:-1;2847:213:24;;-1:-1:-1;;;;;2847:213:24:i;715:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;715:25:24;;;:::i;:::-;;;;;;;;;;;;;;;;3105:374;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3105:374:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3105:374:24;;;;;;;:::i;1347:137:70:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1347:137:70;;;:::i;4403:120:24:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4403:120:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4403:120:24;-1:-1:-1;;;;;4403:120:24;;:::i;8114:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8114:77:24;;;:::i;659::70:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;659:77:70;;;:::i;:::-;;;;-1:-1:-1;;;;;659:77:70;;;;;;;;;;;;;;979:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;979:90:70;;;:::i;2417:254:24:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2417:254:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2417:254:24;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2417:254:24;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2417:254:24;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2417:254:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2417:254:24;;-1:-1:-1;2417:254:24;;-1:-1:-1;;;;;2417:254:24:i;7020:249::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7020:249:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7020:249:24;;;;;;;;:::i;642:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;642:33:24;;;:::i;3529:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3529:114:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3529:114:24;;:::i;2153:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2153:94:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2153:94:24;-1:-1:-1;;;;;2153:94:24;;:::i;608:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;608:28:24;;;:::i;4975:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4975:120:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4975:120:24;-1:-1:-1;;;;;4975:120:24;;:::i;746:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;746:26:24;;;:::i;1655:107:70:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1655:107:70;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:70;-1:-1:-1;;;;;1655:107:70;;:::i;682:27:24:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;682:27:24;;;:::i;4691:111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4691:111:24;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4691:111:24;-1:-1:-1;;;;;4691:111:24;;:::i;6387:413::-;1716:19;1724:10;1716:7;:19::i;:::-;1708:51;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;;;;6548:5;;-1:-1:-1;;;;;6548:5:24;6540:69;;;;-1:-1:-1;;;6540:69:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6624:8;;:29;;;-1:-1:-1;;;6624:29:24;;-1:-1:-1;;;;;6624:29:24;;;;;;;;;:8;;;;;:22;;:29;;;;;;;;;;;;;;:8;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;6624:29:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6624:29:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6624:29:24;6620:91;;6678:22;6688:5;6695:4;6678:9;:22::i;:::-;6725:11;;6721:73;;6752:5;;;:31;;;-1:-1:-1;;;6752:31:24;;-1:-1:-1;;;;;6752:31:24;;;;;;;;;;;;;;;;;;:5;;;;;:15;;:31;;;;;:5;;:31;;;;;;;;:5;;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;6752:31:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6752:31:24;;;;6721:73;1854:18;;:25;;1877:1;1854:25;:22;:25;:::i;:::-;1832:10;:18;:47;;;;:70;;;1883:19;1891:10;1883:7;:19::i;:::-;1828:123;;;1918:22;1929:10;1918;:22::i;:::-;6387:413;;;:::o;3818:100::-;3871:4;3894:17;:6;3905:5;3894:17;:10;:17;:::i;:::-;3887:24;3818:100;-1:-1:-1;;3818:100:24:o;4086:144::-;1716:19;1724:10;1716:7;:19::i;:::-;1708:51;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;;;;4180:8;;:43;;;-1:-1:-1;;;4180:43:24;;-1:-1:-1;;;;;4180:43:24;;;;;;;;;;;;;;;;;;;;;;;:8;;;;;:30;;4211:5;;4218:4;;4180:43;;;;;;;;;;;;:8;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4180:43:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4180:43:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;1854:18:24;;:25;;-1:-1:-1;1854:18:24;-1:-1:-1;1877:1:24;1854:25;:22;:25;:::i;:::-;1832:10;:18;:47;;;;:70;;;1883:19;1891:10;1883:7;:19::i;:::-;1828:123;;;1918:22;1929:10;1918;:22::i;:::-;4086:144;;:::o;7662:377::-;7807:12;7821:24;1716:19;1724:10;1716:7;:19::i;:::-;1708:51;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;;;;7936:9;-1:-1:-1;;;;;7936:14:24;7957:6;7965:5;7936:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;7936:35:24;;;;;;;;;;;;;;;;;;;;;;;;;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;;7911:60:24;;;;;;;;7998:9;-1:-1:-1;;;;;7986:46:24;;8009:5;8016:6;8024:7;7986:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7986:46:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1854:18;;:25;;1877:1;1854:25;:22;:25;:::i;:::-;1832:10;:18;:47;;;;:70;;;1883:19;1891:10;1883:7;:19::i;:::-;1828:123;;;1918:22;1929:10;1918;:22::i;:::-;7662:377;;;;;;:::o;5323:340::-;1716:19;1724:10;1716:7;:19::i;:::-;1708:51;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;;;;5405:8;:6;:8::i;:::-;5474:12;;5453:10;;5444:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;5444:27:24;;;;;;;;;;:42;5423:137;;;;-1:-1:-1;;;5423:137:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5600:13;;:20;;5618:1;5600:20;:17;:20;:::i;:::-;5582:5;-1:-1:-1;;;;;5574:22:24;;:46;5570:59;;5622:7;;5570:59;5639:17;5650:5;5639:10;:17::i;:::-;1854:18;;:25;;1877:1;1854:25;:22;:25;:::i;:::-;1832:10;:18;:47;;;;:70;;;1883:19;1891:10;1883:7;:19::i;:::-;1828:123;;;1918:22;1929:10;1918;:22::i;:::-;5323:340;:::o;2847:213::-;863:9:70;:7;:9::i;:::-;855:18;;;;;;2927:9:24;2922:95;2946:7;:14;2942:1;:18;2922:95;;;2981:25;2995:7;3003:1;2995:10;;;;;;;;;;;;;;2981:6;:13;;:25;;;;:::i;:::-;2962:3;;2922:95;;;;3045:7;3031:22;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;3031:22:24;;;;;;;;;;;;-1:-1:-1;3031:22:24;;-1:-1:-1;3031:22:24;;;-1:-1:-1;;;3031:22:24;2847:213;:::o;715:25::-;;;;:::o;3105:374::-;3200:9;:16;:29;-1:-1:-1;3192:61:24;;;;;-1:-1:-1;;;3192:61:24;;;;;;;;;;;;-1:-1:-1;;;3192:61:24;;;;;;;;;;;;;;;3280:10;3263:210;3297:9;:16;3293:20;;:36;;;;;3321:8;3317:1;:12;3293:36;3263:210;;;3379:18;;:25;;3402:1;3379:25;:22;:25;:::i;:::-;3355:9;3365:1;3355:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3355:12:24;:20;:49;3351:112;;3424:24;3435:9;3445:1;3435:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3435:12:24;3424:10;:24::i;:::-;3332:3;;3263:210;;;-1:-1:-1;1854:18:24;;:25;;1877:1;1854:25;:22;:25;:::i;1347:137:70:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1429:6;;1408:40;;-1:-1:-1;;;;;1429:6:70;;;;1408:40;;1445:1;;1408:40;1475:1;1458:19;;-1:-1:-1;;;;;;1458:19:70;;;1347:137::o;4403:120:24:-;1716:19;1724:10;1716:7;:19::i;:::-;1708:51;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;;;;4483:8;;:33;;;-1:-1:-1;;;4483:33:24;;-1:-1:-1;;;;;4483:33:24;;;;;;;;;:8;;;;;:26;;:33;;;;;:8;;:33;;;;;;;:8;;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;4483:33:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;1854:18:24;;:25;;-1:-1:-1;1854:18:24;-1:-1:-1;1877:1:24;1854:25;:22;:25;:::i;8114:77::-;863:9:70;:7;:9::i;:::-;855:18;;;;;;8173:10:24;8160:24;659:77:70;697:7;723:6;-1:-1:-1;;;;;723:6:70;659:77;:::o;979:90::-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:70;1042:10;:20;;979:90::o;2417:254:24:-;863:9:70;:7;:9::i;:::-;855:18;;;;;;2502:9:24;2497:133;2521:7;:14;2517:1;:18;2497:133;;;2556:22;2567:7;2575:1;2567:10;;;;;;;;;;;;;;2556:6;:10;;:22;;;;:::i;:::-;2593:9;2608:7;2616:1;2608:10;;;;;;;;;;;;;;;;;;;27::-1;;39:1;23:18;;;45:23;;-1:-1;2593:26:24;;;;;;;;;;;;-1:-1:-1;;;;;;2593:26:24;-1:-1:-1;;;;;2593:26:24;;;;;;;;;;2537:3;2497:133;;;;2656:7;2644:20;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;2644:20:24;;;;;;;;;;;;-1:-1:-1;2644:20:24;;-1:-1:-1;2644:20:24;;;-1:-1:-1;;;2644:20:24;2417:254;:::o;7020:249::-;1716:19;1724:10;1716:7;:19::i;:::-;1708:51;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;;;;7119:5;;-1:-1:-1;;;;;7119:5:24;7111:69;;;;-1:-1:-1;;;7111:69:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7194:11;;7190:73;;7221:5;;;:31;;;-1:-1:-1;;;7221:31:24;;-1:-1:-1;;;;;7221:31:24;;;;;;;;;;;;;;;;;;:5;;;;;:15;;:31;;;;;:5;;:31;;;;;;;;:5;;:31;;;5:2:-1;;;;30:1;27;20:12;7190:73:24;1854:18;;:25;;1877:1;1854:25;:22;:25;:::i;642:33::-;;;;:::o;3529:114::-;3598:38;3608:10;3620;3633:2;3620:15;3598:9;:38::i;2153:94::-;863:9:70;:7;:9::i;:::-;855:18;;;;;;2226:5:24;:14;;-1:-1:-1;;;;;;2226:14:24;-1:-1:-1;;;;;2226:14:24;;;;;;;;;;2153:94::o;608:28::-;;;;:::o;4975:120::-;1716:19;1724:10;1716:7;:19::i;:::-;1708:51;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;;;;5055:8;;:33;;;-1:-1:-1;;;5055:33:24;;-1:-1:-1;;;;;5055:33:24;;;;;;;;;:8;;;;;:26;;:33;;;;;:8;;:33;;;;;;;:8;;:33;;;5:2:-1;;;;30:1;27;20:12;746:26:24;;;;:::o;1655:107:70:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;682:27:24:-;;;;:::o;4691:111::-;1716:19;1724:10;1716:7;:19::i;:::-;1708:51;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;-1:-1:-1;;;1708:51:24;;;;;;;;;;;;;;;4765:8;;:30;;;-1:-1:-1;;;4765:30:24;;-1:-1:-1;;;;;4765:30:24;;;;;;;;;:8;;;;;:23;;:30;;;;;:8;;:30;;;;;;;:8;;:30;;;5:2:-1;;;;30:1;27;20:12;778:296:69;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;;778:296;-1:-1:-1;;;;778:296:69:o;5669:323:24:-;5742:10;;5733:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;5733:29:24;;;;;;;;;:34;;5766:1;5733:34;;;5794:16;5754:7;5794;:16::i;:::-;:53;;5834:13;;5794:53;;;5813:18;;5794:53;5777:70;-1:-1:-1;5857:13:24;5873:36;5777:70;-1:-1:-1;;;;;5884:24:24;;;5873:36;:10;:36;:::i;:::-;5919:23;;5857:52;;-1:-1:-1;;;;;;5919:16:24;;;:23;;;;;5857:52;;5919:23;;;;5857:52;5919:16;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;5957:28:24;;;;;;;;-1:-1:-1;;;;;5957:28:24;;;;;;;;;;;;;5669:323;;;:::o;786:162:63:-;858:4;-1:-1:-1;;;;;882:21:63;;874:30;;;;;;-1:-1:-1;;;;;;921:20:63;:11;:20;;;;;;;;;;;;;;;786:162::o;2059:88:24:-;2134:6;2110:20;2118:11;;2110:3;:7;;:20;;;;:::i;:::-;2109:31;;;;;;2096:10;:44;2059:88::o;514:184:63:-;-1:-1:-1;;;;;593:21:63;;585:30;;;;;;633:18;637:4;643:7;633:3;:18::i;:::-;625:27;;;;;;-1:-1:-1;;;;;663:20:63;686:5;663:20;;;;;;;;;;;:28;;-1:-1:-1;;663:28:63;;;514:184::o;259:181::-;-1:-1:-1;;;;;335:21:63;;327:30;;;;;;376:18;380:4;386:7;376:3;:18::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:63;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:63;429:4;406:27;;;259:181::o;1906:183:70:-;-1:-1:-1;;;;;1979:22:70;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:70;;;;2038:6;;;2017:38;;;2065:6;:17;;-1:-1:-1;;;;;;2065:17:70;-1:-1:-1;;;;;2065:17:70;;;;;;;;;;1906:183::o;1205:145:69:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:69;;;1205:145::o",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/access/Roles.sol\";\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\nimport \"../identity/Identity.sol\";\nimport \"../dao/schemes/SignUpBonus.sol\";\n\n/* @title Admin wallet contract allowing whitelisting and topping up of\n * addresses\n */\ncontract FuseFaucet is Ownable {\n    using Roles for Roles.Role;\n    using SafeMath for uint256;\n\n    Roles.Role private admins;\n\n    address payable[] adminlist;\n\n    Identity identity;\n\n    SignUpBonus bonus = SignUpBonus(0);\n\n    uint256 public toppingAmount;\n    uint256 public adminToppingAmount;\n\n    uint256 public toppingTimes;\n    uint256 public currentDay;\n    uint256 public periodStart;\n\n    mapping(uint256 => mapping(address => uint256)) toppings;\n\n    event AdminsAdded(address payable[] indexed admins);\n    event AdminsRemoved(address[] indexed admins);\n    event WalletTopped(address indexed user, uint256 amount);\n    event GenericCall(\n        address indexed _contract,\n        bytes _data,\n        uint256 _value,\n        bool _success\n    );\n\n    constructor(\n        address payable[] memory _admins,\n        uint256 _toppingAmount,\n        uint256 _toppingTimes,\n        Identity _identity\n    ) public {\n        identity = _identity;\n\n        toppingAmount = _toppingAmount;\n        adminToppingAmount = 1e9 * 9e6; //1gwei gas price * 9000000 gas limit\n        toppingTimes = _toppingTimes;\n        periodStart = now;\n\n        if (_admins.length > 0) {\n            addAdmins(_admins);\n        }\n    }\n\n    /* @dev Modifier that checks if caller is admin of wallet\n     */\n    modifier onlyAdmin() {\n        require(isAdmin(msg.sender), \"Caller is not admin\");\n        _;\n    }\n\n    modifier reimburseGas() {\n        _;\n        if (msg.sender.balance <= adminToppingAmount.div(2) && isAdmin(msg.sender)) {\n            _topWallet(msg.sender);\n        }\n    }\n\n    function() external payable {}\n\n    /* @dev Internal function that sets current day\n     */\n    function setDay() internal {\n        currentDay = (now.sub(periodStart)) / 1 days;\n    }\n\n    function setBonusContract(SignUpBonus _bonus) public onlyOwner {\n        bonus = _bonus;\n    }\n\n    /* @dev Function to add list of addresses to admins\n     * can only be called by creator of contract\n     * @param _admins the list of addresses to add\n     */\n    function addAdmins(address payable[] memory _admins) public onlyOwner {\n        for (uint256 i = 0; i < _admins.length; i++) {\n            admins.add(_admins[i]);\n\n            adminlist.push(_admins[i]);\n        }\n        emit AdminsAdded(_admins);\n    }\n\n    /* @dev Function to remove list of addresses to admins\n     * can only be called by creator of contract\n     * @param _admins the list of addresses to remove\n     */\n    function removeAdmins(address[] memory _admins) public onlyOwner {\n        for (uint256 i = 0; i < _admins.length; i++) {\n            admins.remove(_admins[i]);\n        }\n        emit AdminsRemoved(_admins);\n    }\n\n    /**\n     * @dev top admins\n     */\n    function topAdmins(uint256 startIndex, uint256 endIndex) public reimburseGas {\n        require(adminlist.length > startIndex, \"Admin list is empty\");\n        for (uint256 i = startIndex; (i < adminlist.length && i < endIndex); i++) {\n            if (adminlist[i].balance <= adminToppingAmount.div(2)) {\n                _topWallet(adminlist[i]);\n            }\n        }\n    }\n\n    /* @dev top the first 50 admins\n     */\n    function topAdmins(uint256 startIndex) public reimburseGas {\n        topAdmins(startIndex, startIndex + 50);\n    }\n\n    /**\n     * @dev Function to check if given address is an admin\n     * @param _user the address to check\n     * @return A bool indicating if user is an admin\n     */\n    function isAdmin(address _user) public view returns (bool) {\n        return admins.has(_user);\n    }\n\n    /* @dev Function to add given address to whitelist of identity contract\n     * can only be done by admins of wallet and if wallet is an IdentityAdmin\n     */\n    function whitelist(address _user, string memory _did) public onlyAdmin reimburseGas {\n        identity.addWhitelistedWithDID(_user, _did);\n    }\n\n    /* @dev Function to remove given address from whitelist of identity contract\n     * can only be done by admins of wallet and if wallet is an IdentityAdmin\n     */\n    function removeWhitelist(address _user) public onlyAdmin reimburseGas {\n        identity.removeWhitelisted(_user);\n    }\n\n    /* @dev Function to add given address to blacklist of identity contract\n     * can only be done by admins of wallet and if wallet is an IdentityAdmin\n     */\n    function blacklist(address _user) public onlyAdmin reimburseGas {\n        identity.addBlacklisted(_user);\n    }\n\n    /* @dev Function to remove given address from blacklist of identity contract\n     * can only be done by admins of wallet and if wallet is an IdentityAdmin\n     */\n    function removeBlacklist(address _user) public onlyAdmin reimburseGas {\n        identity.removeBlacklisted(_user);\n    }\n\n    /* @dev Function to top given address with amount of G$ given in constructor\n     * can only be done by admin the amount of times specified in constructor per day\n     * @param _user The address to transfer to\n     */\n    function topWallet(address payable _user) public onlyAdmin reimburseGas {\n        setDay();\n        require(\n            toppings[currentDay][_user] < toppingTimes,\n            \"User wallet has been topped too many times today\"\n        );\n        if (address(_user).balance >= toppingAmount.div(4)) return;\n\n        _topWallet(_user);\n    }\n\n    function _topWallet(address payable _wallet) internal {\n        toppings[currentDay][_wallet] += 1;\n        uint256 amount = isAdmin(_wallet) ? adminToppingAmount : toppingAmount;\n        uint256 toTop = amount.sub(address(_wallet).balance);\n        _wallet.transfer(toTop);\n        emit WalletTopped(_wallet, toTop);\n    }\n\n    /* @dev Function to whitelist user and also award him pending bonuses, it can be used also later\n     * when user is already whitelisted to just award pending bonuses\n     * can only be done by admin\n     * @param _user The address to transfer to and whitelist\n     * @param _amount the bonus amount to give\n     * @param _did decentralized id of user, pointer to some profile\n     */\n    function whitelistAndAwardUser(\n        address _user,\n        uint256 _amount,\n        string memory _did\n    ) public onlyAdmin reimburseGas {\n        require(bonus != SignUpBonus(0), \"SignUp bonus has not been set yet\");\n\n        if (identity.isWhitelisted(_user) == false) {\n            whitelist(_user, _did);\n        }\n\n        if (_amount > 0) {\n            bonus.awardUser(_user, _amount);\n        }\n    }\n\n    /**\n     * @dev Function to award user with pending bonuses,\n     * can only be done by admin\n     * @param _user The address to transfer to and whitelist\n     * @param _amount the bonus amount to give\n     */\n    function awardUser(address _user, uint256 _amount) public onlyAdmin reimburseGas {\n        require(bonus != SignUpBonus(0), \"SignUp bonus has not been set yet\");\n        if (_amount > 0) {\n            bonus.awardUser(_user, _amount);\n        }\n    }\n\n    /**\n     * @dev perform a generic call to an arbitrary contract\n     * @param _contract  the contract's address to call\n     * @param _data ABI-encoded contract call to call `_contract` address.\n     * @param _value value (ETH) to transfer with the transaction\n     * @return bool    success or fail\n     *         bytes - the return bytes of the called contract's function.\n     */\n    function genericCall(\n        address _contract,\n        bytes memory _data,\n        uint256 _value\n    ) public onlyAdmin reimburseGas returns (bool success, bytes memory returnValue) {\n        // solhint-disable-next-line avoid-call-value\n        (success, returnValue) = _contract.call.value(_value)(_data);\n        emit GenericCall(_contract, _data, _value, success);\n    }\n\n    /**\n     * @dev destroy wallet and return funds to owner\n     */\n    function destroy() public onlyOwner {\n        selfdestruct(msg.sender);\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/fuseFaucet/FuseFaucet.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/fuseFaucet/FuseFaucet.sol",
    "exportedSymbols": {
      "FuseFaucet": [
        4797
      ]
    },
    "id": 4798,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4182,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:24"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "openzeppelin-solidity/contracts/access/Roles.sol",
        "id": 4183,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 15916,
        "src": "25:58:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 4184,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 16592,
        "src": "84:63:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 4185,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 16483,
        "src": "148:59:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol",
        "file": "../identity/Identity.sol",
        "id": 4186,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 5311,
        "src": "209:34:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SignUpBonus.sol",
        "file": "../dao/schemes/SignUpBonus.sol",
        "id": 4187,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 3737,
        "src": "244:40:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4188,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16591,
              "src": "398:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$16591",
                "typeString": "contract Ownable"
              }
            },
            "id": 4189,
            "nodeType": "InheritanceSpecifier",
            "src": "398:7:24"
          }
        ],
        "contractDependencies": [
          16591
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4797,
        "linearizedBaseContracts": [
          4797,
          16591
        ],
        "name": "FuseFaucet",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4192,
            "libraryName": {
              "contractScope": null,
              "id": 4190,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15915,
              "src": "418:5:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$15915",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "412:27:24",
            "typeName": {
              "contractScope": null,
              "id": 4191,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15828,
              "src": "428:10:24",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$15828_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "id": 4195,
            "libraryName": {
              "contractScope": null,
              "id": 4193,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16482,
              "src": "450:8:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$16482",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "444:27:24",
            "typeName": {
              "id": 4194,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "463:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 4197,
            "name": "admins",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "477:25:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$15828_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 4196,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15828,
              "src": "477:10:24",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$15828_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4200,
            "name": "adminlist",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "509:27:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
              "typeString": "address payable[]"
            },
            "typeName": {
              "baseType": {
                "id": 4198,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "509:15:24",
                "stateMutability": "payable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address_payable",
                  "typeString": "address payable"
                }
              },
              "id": 4199,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "509:17:24",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                "typeString": "address payable[]"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4202,
            "name": "identity",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "543:17:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Identity_$5310",
              "typeString": "contract Identity"
            },
            "typeName": {
              "contractScope": null,
              "id": 4201,
              "name": "Identity",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5310,
              "src": "543:8:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Identity_$5310",
                "typeString": "contract Identity"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4207,
            "name": "bonus",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "567:34:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_SignUpBonus_$3736",
              "typeString": "contract SignUpBonus"
            },
            "typeName": {
              "contractScope": null,
              "id": 4203,
              "name": "SignUpBonus",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3736,
              "src": "567:11:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                "typeString": "contract SignUpBonus"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "30",
                  "id": 4205,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "599:1:24",
                  "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": 4204,
                "name": "SignUpBonus",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 3736,
                "src": "587:11:24",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_contract$_SignUpBonus_$3736_$",
                  "typeString": "type(contract SignUpBonus)"
                }
              },
              "id": 4206,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "587:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                "typeString": "contract SignUpBonus"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4209,
            "name": "toppingAmount",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "608:28:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4208,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "608:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4211,
            "name": "adminToppingAmount",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "642:33:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4210,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "642:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4213,
            "name": "toppingTimes",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "682:27:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4212,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "682:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4215,
            "name": "currentDay",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "715:25:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4214,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "715:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4217,
            "name": "periodStart",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "746:26:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4216,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "746:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4223,
            "name": "toppings",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "779:56:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(uint256 => mapping(address => uint256))"
            },
            "typeName": {
              "id": 4222,
              "keyType": {
                "id": 4218,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "787:7:24",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "779:47:24",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(uint256 => mapping(address => uint256))"
              },
              "valueType": {
                "id": 4221,
                "keyType": {
                  "id": 4219,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "806:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "798:27:24",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 4220,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "817:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4228,
            "name": "AdminsAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4226,
                  "indexed": true,
                  "name": "admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4228,
                  "src": "860:32:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4224,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "860:15:24",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4225,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "860:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "859:34:24"
            },
            "src": "842:52:24"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4233,
            "name": "AdminsRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4231,
                  "indexed": true,
                  "name": "admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4233,
                  "src": "919:24:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4229,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "919:7:24",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 4230,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "919:9:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "918:26:24"
            },
            "src": "899:46:24"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4239,
            "name": "WalletTopped",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4235,
                  "indexed": true,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "969:20:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4234,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "969:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4237,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "991:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4236,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "991:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "968:38:24"
            },
            "src": "950:57:24"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4249,
            "name": "GenericCall",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4241,
                  "indexed": true,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 4249,
                  "src": "1039:25:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1039:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4243,
                  "indexed": false,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4249,
                  "src": "1074:11:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4242,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1074:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4245,
                  "indexed": false,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 4249,
                  "src": "1095:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1095:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4247,
                  "indexed": false,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 4249,
                  "src": "1119:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4246,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1119:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1029:109:24"
            },
            "src": "1012:127:24"
          },
          {
            "body": {
              "id": 4293,
              "nodeType": "Block",
              "src": "1303:298:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4261,
                      "name": "identity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4202,
                      "src": "1313:8:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Identity_$5310",
                        "typeString": "contract Identity"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4262,
                      "name": "_identity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4258,
                      "src": "1324:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Identity_$5310",
                        "typeString": "contract Identity"
                      }
                    },
                    "src": "1313:20:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$5310",
                      "typeString": "contract Identity"
                    }
                  },
                  "id": 4264,
                  "nodeType": "ExpressionStatement",
                  "src": "1313:20:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4265,
                      "name": "toppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4209,
                      "src": "1344:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4266,
                      "name": "_toppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4254,
                      "src": "1360:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1344:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4268,
                  "nodeType": "ExpressionStatement",
                  "src": "1344:30:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4269,
                      "name": "adminToppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4211,
                      "src": "1384:18:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_rational_9000000000000000_by_1",
                        "typeString": "int_const 9000000000000000"
                      },
                      "id": 4272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "hexValue": "316539",
                        "id": 4270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1405:3:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000000_by_1",
                          "typeString": "int_const 1000000000"
                        },
                        "value": "1e9"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "396536",
                        "id": 4271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1411:3:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_9000000_by_1",
                          "typeString": "int_const 9000000"
                        },
                        "value": "9e6"
                      },
                      "src": "1405:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_9000000000000000_by_1",
                        "typeString": "int_const 9000000000000000"
                      }
                    },
                    "src": "1384:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4274,
                  "nodeType": "ExpressionStatement",
                  "src": "1384:30:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4275,
                      "name": "toppingTimes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4213,
                      "src": "1462:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4276,
                      "name": "_toppingTimes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4256,
                      "src": "1477:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1462:28:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4278,
                  "nodeType": "ExpressionStatement",
                  "src": "1462:28:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4279,
                      "name": "periodStart",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4217,
                      "src": "1500:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4280,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17347,
                      "src": "1514:3:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1500:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4282,
                  "nodeType": "ExpressionStatement",
                  "src": "1500:17:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4283,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4252,
                        "src": "1532:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      },
                      "id": 4284,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1532:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1549:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1532:18:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4292,
                  "nodeType": "IfStatement",
                  "src": "1528:67:24",
                  "trueBody": {
                    "id": 4291,
                    "nodeType": "Block",
                    "src": "1552:43:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4288,
                              "name": "_admins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4252,
                              "src": "1576:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                "typeString": "address payable[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                "typeString": "address payable[] memory"
                              }
                            ],
                            "id": 4287,
                            "name": "addAdmins",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4402,
                            "src": "1566:9:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_payable_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address payable[] memory)"
                            }
                          },
                          "id": 4289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1566:18:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4290,
                        "nodeType": "ExpressionStatement",
                        "src": "1566:18:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4294,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4252,
                  "name": "_admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "1166:32:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4250,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1166:15:24",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4251,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1166:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4254,
                  "name": "_toppingAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "1208:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4253,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1208:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4256,
                  "name": "_toppingTimes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "1240:21:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4255,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1240:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4258,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "1271:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$5310",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4257,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5310,
                    "src": "1271:8:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$5310",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1156:139:24"
            },
            "returnParameters": {
              "id": 4260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1303:0:24"
            },
            "scope": 4797,
            "src": "1145:456:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4305,
              "nodeType": "Block",
              "src": "1698:79:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4298,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17345,
                              "src": "1724:3:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4299,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1724:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 4297,
                          "name": "isAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4517,
                          "src": "1716:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 4300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1716:19:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616c6c6572206973206e6f742061646d696e",
                        "id": 4301,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1737:21:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b7254d08cc38f034b0ac17414bcb2690b039dd5f9d2a2ec02802a3d41869c288",
                          "typeString": "literal_string \"Caller is not admin\""
                        },
                        "value": "Caller is not admin"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b7254d08cc38f034b0ac17414bcb2690b039dd5f9d2a2ec02802a3d41869c288",
                          "typeString": "literal_string \"Caller is not admin\""
                        }
                      ],
                      "id": 4296,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "1708:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1708:51:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4303,
                  "nodeType": "ExpressionStatement",
                  "src": "1708:51:24"
                },
                {
                  "id": 4304,
                  "nodeType": "PlaceholderStatement",
                  "src": "1769:1:24"
                }
              ]
            },
            "documentation": null,
            "id": 4306,
            "name": "onlyAdmin",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4295,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1695:2:24"
            },
            "src": "1677:100:24",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4329,
              "nodeType": "Block",
              "src": "1807:150:24",
              "statements": [
                {
                  "id": 4308,
                  "nodeType": "PlaceholderStatement",
                  "src": "1817:1:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4309,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17345,
                            "src": "1832:3:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4310,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1832:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 4311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1832:18:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 4314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1877:1:24",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4312,
                            "name": "adminToppingAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4211,
                            "src": "1854:18:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16413,
                          "src": "1854:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 4315,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1854:25:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1832:47:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4318,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17345,
                            "src": "1891:3:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1891:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 4317,
                        "name": "isAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "1883:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 4320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1883:19:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1832:70:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4328,
                  "nodeType": "IfStatement",
                  "src": "1828:123:24",
                  "trueBody": {
                    "id": 4327,
                    "nodeType": "Block",
                    "src": "1904:47:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4323,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17345,
                                "src": "1929:3:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1929:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4322,
                            "name": "_topWallet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4667,
                            "src": "1918:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                              "typeString": "function (address payable)"
                            }
                          },
                          "id": 4325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1918:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4326,
                        "nodeType": "ExpressionStatement",
                        "src": "1918:22:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4330,
            "name": "reimburseGas",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4307,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1804:2:24"
            },
            "src": "1783:174:24",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4333,
              "nodeType": "Block",
              "src": "1991:2:24",
              "statements": []
            },
            "documentation": null,
            "id": 4334,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4331,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1971:2:24"
            },
            "returnParameters": {
              "id": 4332,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1991:0:24"
            },
            "scope": 4797,
            "src": "1963:30:24",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4347,
              "nodeType": "Block",
              "src": "2086:61:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4337,
                      "name": "currentDay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4215,
                      "src": "2096:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4340,
                                "name": "periodStart",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4217,
                                "src": "2118:11:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4338,
                                "name": "now",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17347,
                                "src": "2110:3:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4339,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16437,
                              "src": "2110:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4341,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2110:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 4342,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2109:22:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 4343,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2134:6:24",
                        "subdenomination": "days",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        },
                        "value": "1"
                      },
                      "src": "2109:31:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2096:44:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4346,
                  "nodeType": "ExpressionStatement",
                  "src": "2096:44:24"
                }
              ]
            },
            "documentation": null,
            "id": 4348,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setDay",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4335,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2074:2:24"
            },
            "returnParameters": {
              "id": 4336,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2086:0:24"
            },
            "scope": 4797,
            "src": "2059:88:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4359,
              "nodeType": "Block",
              "src": "2216:31:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4355,
                      "name": "bonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4207,
                      "src": "2226:5:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                        "typeString": "contract SignUpBonus"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4356,
                      "name": "_bonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4350,
                      "src": "2234:6:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                        "typeString": "contract SignUpBonus"
                      }
                    },
                    "src": "2226:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                      "typeString": "contract SignUpBonus"
                    }
                  },
                  "id": 4358,
                  "nodeType": "ExpressionStatement",
                  "src": "2226:14:24"
                }
              ]
            },
            "documentation": null,
            "id": 4360,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4353,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4352,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16525,
                  "src": "2206:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2206:9:24"
              }
            ],
            "name": "setBonusContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4351,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4350,
                  "name": "_bonus",
                  "nodeType": "VariableDeclaration",
                  "scope": 4360,
                  "src": "2179:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                    "typeString": "contract SignUpBonus"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4349,
                    "name": "SignUpBonus",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3736,
                    "src": "2179:11:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                      "typeString": "contract SignUpBonus"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2178:20:24"
            },
            "returnParameters": {
              "id": 4354,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2216:0:24"
            },
            "scope": 4797,
            "src": "2153:94:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4401,
              "nodeType": "Block",
              "src": "2487:184:24",
              "statements": [
                {
                  "body": {
                    "id": 4395,
                    "nodeType": "Block",
                    "src": "2542:88:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4382,
                                "name": "_admins",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4363,
                                "src": "2567:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                  "typeString": "address payable[] memory"
                                }
                              },
                              "id": 4384,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4383,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4369,
                                "src": "2575:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2567:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4379,
                              "name": "admins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4197,
                              "src": "2556:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Role_$15828_storage",
                                "typeString": "struct Roles.Role storage ref"
                              }
                            },
                            "id": 4381,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15860,
                            "src": "2556:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$15828_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$15828_storage_ptr_$",
                              "typeString": "function (struct Roles.Role storage pointer,address)"
                            }
                          },
                          "id": 4385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2556:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4386,
                        "nodeType": "ExpressionStatement",
                        "src": "2556:22:24"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4390,
                                "name": "_admins",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4363,
                                "src": "2608:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                  "typeString": "address payable[] memory"
                                }
                              },
                              "id": 4392,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4391,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4369,
                                "src": "2616:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2608:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4387,
                              "name": "adminlist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4200,
                              "src": "2593:9:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                                "typeString": "address payable[] storage ref"
                              }
                            },
                            "id": 4389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2593:14:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_payable_$returns$_t_uint256_$",
                              "typeString": "function (address payable) returns (uint256)"
                            }
                          },
                          "id": 4393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2593:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4394,
                        "nodeType": "ExpressionStatement",
                        "src": "2593:26:24"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4372,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4369,
                      "src": "2517:1:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4373,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4363,
                        "src": "2521:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      },
                      "id": 4374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2521:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2517:18:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4396,
                  "initializationExpression": {
                    "assignments": [
                      4369
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4369,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4396,
                        "src": "2502:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4368,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2502:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4371,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2514:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2502:13:24"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4377,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2537:3:24",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4376,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4369,
                        "src": "2537:1:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4378,
                    "nodeType": "ExpressionStatement",
                    "src": "2537:3:24"
                  },
                  "nodeType": "ForStatement",
                  "src": "2497:133:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4398,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4363,
                        "src": "2656:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      ],
                      "id": 4397,
                      "name": "AdminsAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4228,
                      "src": "2644:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_address_payable_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address payable[] memory)"
                      }
                    },
                    "id": 4399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2644:20:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4400,
                  "nodeType": "EmitStatement",
                  "src": "2639:25:24"
                }
              ]
            },
            "documentation": null,
            "id": 4402,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4366,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4365,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16525,
                  "src": "2477:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2477:9:24"
              }
            ],
            "name": "addAdmins",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4363,
                  "name": "_admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4402,
                  "src": "2436:32:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4361,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2436:15:24",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4362,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2436:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2435:34:24"
            },
            "returnParameters": {
              "id": 4367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2487:0:24"
            },
            "scope": 4797,
            "src": "2417:254:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4435,
              "nodeType": "Block",
              "src": "2912:148:24",
              "statements": [
                {
                  "body": {
                    "id": 4429,
                    "nodeType": "Block",
                    "src": "2967:50:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4424,
                                "name": "_admins",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4405,
                                "src": "2995:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 4426,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4425,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4411,
                                "src": "3003:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2995:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4421,
                              "name": "admins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4197,
                              "src": "2981:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Role_$15828_storage",
                                "typeString": "struct Roles.Role storage ref"
                              }
                            },
                            "id": 4423,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15891,
                            "src": "2981:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$15828_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$15828_storage_ptr_$",
                              "typeString": "function (struct Roles.Role storage pointer,address)"
                            }
                          },
                          "id": 4427,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2981:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4428,
                        "nodeType": "ExpressionStatement",
                        "src": "2981:25:24"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4414,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4411,
                      "src": "2942:1:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4415,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4405,
                        "src": "2946:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 4416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2946:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2942:18:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4430,
                  "initializationExpression": {
                    "assignments": [
                      4411
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4411,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4430,
                        "src": "2927:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4410,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2927:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4413,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4412,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2939:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2927:13:24"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2962:3:24",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4418,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4411,
                        "src": "2962:1:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4420,
                    "nodeType": "ExpressionStatement",
                    "src": "2962:3:24"
                  },
                  "nodeType": "ForStatement",
                  "src": "2922:95:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4432,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4405,
                        "src": "3045:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 4431,
                      "name": "AdminsRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4233,
                      "src": "3031:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory)"
                      }
                    },
                    "id": 4433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3031:22:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4434,
                  "nodeType": "EmitStatement",
                  "src": "3026:27:24"
                }
              ]
            },
            "documentation": null,
            "id": 4436,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4408,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4407,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16525,
                  "src": "2902:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2902:9:24"
              }
            ],
            "name": "removeAdmins",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4405,
                  "name": "_admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4436,
                  "src": "2869:24:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4403,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2869:7:24",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 4404,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2869:9:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2868:26:24"
            },
            "returnParameters": {
              "id": 4409,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2912:0:24"
            },
            "scope": 4797,
            "src": "2847:213:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4488,
              "nodeType": "Block",
              "src": "3182:297:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4449,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4446,
                            "name": "adminlist",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4200,
                            "src": "3200:9:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                              "typeString": "address payable[] storage ref"
                            }
                          },
                          "id": 4447,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3200:16:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4448,
                          "name": "startIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4438,
                          "src": "3219:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3200:29:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "41646d696e206c69737420697320656d707479",
                        "id": 4450,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3231:21:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f7fe5c3098719b10144bc233527215dc7e56e65cd1757a1eeae2dfe810c76681",
                          "typeString": "literal_string \"Admin list is empty\""
                        },
                        "value": "Admin list is empty"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f7fe5c3098719b10144bc233527215dc7e56e65cd1757a1eeae2dfe810c76681",
                          "typeString": "literal_string \"Admin list is empty\""
                        }
                      ],
                      "id": 4445,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "3192:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3192:61:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4452,
                  "nodeType": "ExpressionStatement",
                  "src": "3192:61:24"
                },
                {
                  "body": {
                    "id": 4486,
                    "nodeType": "Block",
                    "src": "3337:136:24",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4469,
                                "name": "adminlist",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4200,
                                "src": "3355:9:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                                  "typeString": "address payable[] storage ref"
                                }
                              },
                              "id": 4471,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4470,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4454,
                                "src": "3365:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3355:12:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 4472,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3355:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 4475,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3402:1:24",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4473,
                                "name": "adminToppingAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4211,
                                "src": "3379:18:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4474,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "div",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16413,
                              "src": "3379:22:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4476,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3379:25:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3355:49:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4485,
                        "nodeType": "IfStatement",
                        "src": "3351:112:24",
                        "trueBody": {
                          "id": 4484,
                          "nodeType": "Block",
                          "src": "3406:57:24",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 4479,
                                      "name": "adminlist",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4200,
                                      "src": "3435:9:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                                        "typeString": "address payable[] storage ref"
                                      }
                                    },
                                    "id": 4481,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 4480,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4454,
                                      "src": "3445:1:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3435:12:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 4478,
                                  "name": "_topWallet",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4667,
                                  "src": "3424:10:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                                    "typeString": "function (address payable)"
                                  }
                                },
                                "id": 4482,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3424:24:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4483,
                              "nodeType": "ExpressionStatement",
                              "src": "3424:24:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4457,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4454,
                            "src": "3293:1:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4458,
                              "name": "adminlist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4200,
                              "src": "3297:9:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                                "typeString": "address payable[] storage ref"
                              }
                            },
                            "id": 4459,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3297:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3293:20:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4461,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4454,
                            "src": "3317:1:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4462,
                            "name": "endIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4440,
                            "src": "3321:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3317:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3293:36:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 4465,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3292:38:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4487,
                  "initializationExpression": {
                    "assignments": [
                      4454
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4454,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4487,
                        "src": "3268:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4453,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3268:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4456,
                    "initialValue": {
                      "argumentTypes": null,
                      "id": 4455,
                      "name": "startIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4438,
                      "src": "3280:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3268:22:24"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3332:3:24",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4466,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4454,
                        "src": "3332:1:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4468,
                    "nodeType": "ExpressionStatement",
                    "src": "3332:3:24"
                  },
                  "nodeType": "ForStatement",
                  "src": "3263:210:24"
                }
              ]
            },
            "documentation": "@dev top admins",
            "id": 4489,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4443,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4442,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "3169:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3169:12:24"
              }
            ],
            "name": "topAdmins",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4438,
                  "name": "startIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 4489,
                  "src": "3124:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4437,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3124:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4440,
                  "name": "endIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 4489,
                  "src": "3144:16:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4439,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3144:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3123:38:24"
            },
            "returnParameters": {
              "id": 4444,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3182:0:24"
            },
            "scope": 4797,
            "src": "3105:374:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4503,
              "nodeType": "Block",
              "src": "3588:55:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4497,
                        "name": "startIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4491,
                        "src": "3608:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4498,
                          "name": "startIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4491,
                          "src": "3620:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3530",
                          "id": 4499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3633:2:24",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_50_by_1",
                            "typeString": "int_const 50"
                          },
                          "value": "50"
                        },
                        "src": "3620:15:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4496,
                      "name": "topAdmins",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4489,
                        4504
                      ],
                      "referencedDeclaration": 4489,
                      "src": "3598:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 4501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3598:38:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4502,
                  "nodeType": "ExpressionStatement",
                  "src": "3598:38:24"
                }
              ]
            },
            "documentation": null,
            "id": 4504,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4494,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4493,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "3575:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3575:12:24"
              }
            ],
            "name": "topAdmins",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4491,
                  "name": "startIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 4504,
                  "src": "3548:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4490,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3548:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3547:20:24"
            },
            "returnParameters": {
              "id": 4495,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3588:0:24"
            },
            "scope": 4797,
            "src": "3529:114:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4516,
              "nodeType": "Block",
              "src": "3877:41:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4513,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4506,
                        "src": "3905:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4511,
                        "name": "admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "3894:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$15828_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 4512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15914,
                      "src": "3894:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$15828_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$15828_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 4514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3894:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4510,
                  "id": 4515,
                  "nodeType": "Return",
                  "src": "3887:24:24"
                }
              ]
            },
            "documentation": "@dev Function to check if given address is an admin\n@param _user the address to check\n@return A bool indicating if user is an admin",
            "id": 4517,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4506,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4517,
                  "src": "3835:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4505,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3835:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3834:15:24"
            },
            "returnParameters": {
              "id": 4510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4509,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4517,
                  "src": "3871:4:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4508,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3871:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3870:6:24"
            },
            "scope": 4797,
            "src": "3818:100:24",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4535,
              "nodeType": "Block",
              "src": "4170:60:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4531,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4211:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4532,
                        "name": "_did",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4521,
                        "src": "4218:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4528,
                        "name": "identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4202,
                        "src": "4180:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$5310",
                          "typeString": "contract Identity"
                        }
                      },
                      "id": 4530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addWhitelistedWithDID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4948,
                      "src": "4180:30:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory) external"
                      }
                    },
                    "id": 4533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4180:43:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4534,
                  "nodeType": "ExpressionStatement",
                  "src": "4180:43:24"
                }
              ]
            },
            "documentation": null,
            "id": 4536,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4524,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4523,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "4147:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4147:9:24"
              },
              {
                "arguments": null,
                "id": 4526,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4525,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "4157:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4157:12:24"
              }
            ],
            "name": "whitelist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4519,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4536,
                  "src": "4105:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4518,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4105:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4521,
                  "name": "_did",
                  "nodeType": "VariableDeclaration",
                  "scope": 4536,
                  "src": "4120:18:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4520,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4120:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4104:35:24"
            },
            "returnParameters": {
              "id": 4527,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4170:0:24"
            },
            "scope": 4797,
            "src": "4086:144:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4551,
              "nodeType": "Block",
              "src": "4473:50:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4548,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4538,
                        "src": "4510:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4545,
                        "name": "identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4202,
                        "src": "4483:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$5310",
                          "typeString": "contract Identity"
                        }
                      },
                      "id": 4547,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "removeWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4964,
                      "src": "4483:26:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 4549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4483:33:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4550,
                  "nodeType": "ExpressionStatement",
                  "src": "4483:33:24"
                }
              ]
            },
            "documentation": null,
            "id": 4552,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4541,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4540,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "4450:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4450:9:24"
              },
              {
                "arguments": null,
                "id": 4543,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4542,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "4460:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4460:12:24"
              }
            ],
            "name": "removeWhitelist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4538,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4552,
                  "src": "4428:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4537,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4428:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4427:15:24"
            },
            "returnParameters": {
              "id": 4544,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4473:0:24"
            },
            "scope": 4797,
            "src": "4403:120:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4567,
              "nodeType": "Block",
              "src": "4755:47:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4564,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4554,
                        "src": "4789:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4561,
                        "name": "identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4202,
                        "src": "4765:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$5310",
                          "typeString": "contract Identity"
                        }
                      },
                      "id": 4563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addBlacklisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5039,
                      "src": "4765:23:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 4565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4765:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4566,
                  "nodeType": "ExpressionStatement",
                  "src": "4765:30:24"
                }
              ]
            },
            "documentation": null,
            "id": 4568,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4557,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4556,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "4732:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4732:9:24"
              },
              {
                "arguments": null,
                "id": 4559,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4558,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "4742:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4742:12:24"
              }
            ],
            "name": "blacklist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4554,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4568,
                  "src": "4710:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4553,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4710:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4709:15:24"
            },
            "returnParameters": {
              "id": 4560,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4755:0:24"
            },
            "scope": 4797,
            "src": "4691:111:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4583,
              "nodeType": "Block",
              "src": "5045:50:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4580,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4570,
                        "src": "5082:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4577,
                        "name": "identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4202,
                        "src": "5055:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$5310",
                          "typeString": "contract Identity"
                        }
                      },
                      "id": 4579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "removeBlacklisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5061,
                      "src": "5055:26:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 4581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5055:33:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4582,
                  "nodeType": "ExpressionStatement",
                  "src": "5055:33:24"
                }
              ]
            },
            "documentation": null,
            "id": 4584,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4573,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4572,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "5022:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5022:9:24"
              },
              {
                "arguments": null,
                "id": 4575,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4574,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "5032:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5032:12:24"
              }
            ],
            "name": "removeBlacklist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4571,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4570,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4584,
                  "src": "5000:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4569,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5000:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4999:15:24"
            },
            "returnParameters": {
              "id": 4576,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5045:0:24"
            },
            "scope": 4797,
            "src": "4975:120:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4622,
              "nodeType": "Block",
              "src": "5395:268:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4593,
                      "name": "setDay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4348,
                      "src": "5405:6:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 4594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5405:8:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4595,
                  "nodeType": "ExpressionStatement",
                  "src": "5405:8:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4597,
                              "name": "toppings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4223,
                              "src": "5444:8:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 4599,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4598,
                              "name": "currentDay",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4215,
                              "src": "5453:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5444:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4601,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4600,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4586,
                            "src": "5465:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5444:27:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4602,
                          "name": "toppingTimes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4213,
                          "src": "5474:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5444:42:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "557365722077616c6c657420686173206265656e20746f7070656420746f6f206d616e792074696d657320746f646179",
                        "id": 4604,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5500:50:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7ec0e3d44e3dfbd6a810932b5bc2a0c76ebc3cf59d9293162dc99895c8f056e7",
                          "typeString": "literal_string \"User wallet has been topped too many times today\""
                        },
                        "value": "User wallet has been topped too many times today"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7ec0e3d44e3dfbd6a810932b5bc2a0c76ebc3cf59d9293162dc99895c8f056e7",
                          "typeString": "literal_string \"User wallet has been topped too many times today\""
                        }
                      ],
                      "id": 4596,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "5423:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5423:137:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4606,
                  "nodeType": "ExpressionStatement",
                  "src": "5423:137:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4608,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4586,
                            "src": "5582:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 4607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5574:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4609,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5574:14:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 4610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5574:22:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "34",
                          "id": 4613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5618:1:24",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          },
                          "value": "4"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4611,
                          "name": "toppingAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4209,
                          "src": "5600:13:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4612,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16413,
                        "src": "5600:17:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5600:20:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5574:46:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4617,
                  "nodeType": "IfStatement",
                  "src": "5570:59:24",
                  "trueBody": {
                    "expression": null,
                    "functionReturnParameters": 4592,
                    "id": 4616,
                    "nodeType": "Return",
                    "src": "5622:7:24"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4619,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4586,
                        "src": "5650:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 4618,
                      "name": "_topWallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4667,
                      "src": "5639:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable)"
                      }
                    },
                    "id": 4620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5639:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4621,
                  "nodeType": "ExpressionStatement",
                  "src": "5639:17:24"
                }
              ]
            },
            "documentation": null,
            "id": 4623,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4589,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4588,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "5372:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5372:9:24"
              },
              {
                "arguments": null,
                "id": 4591,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4590,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "5382:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5382:12:24"
              }
            ],
            "name": "topWallet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4586,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4623,
                  "src": "5342:21:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4585,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5342:15:24",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5341:23:24"
            },
            "returnParameters": {
              "id": 4592,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5395:0:24"
            },
            "scope": 4797,
            "src": "5323:340:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4666,
              "nodeType": "Block",
              "src": "5723:269:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4628,
                          "name": "toppings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4223,
                          "src": "5733:8:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 4631,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4629,
                          "name": "currentDay",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4215,
                          "src": "5742:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5733:20:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4632,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4630,
                        "name": "_wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4625,
                        "src": "5754:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5733:29:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 4633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5766:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "5733:34:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4635,
                  "nodeType": "ExpressionStatement",
                  "src": "5733:34:24"
                },
                {
                  "assignments": [
                    4637
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4637,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4666,
                      "src": "5777:14:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4636,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5777:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4644,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4639,
                          "name": "_wallet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4625,
                          "src": "5802:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 4638,
                        "name": "isAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "5794:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 4640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5794:16:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 4642,
                      "name": "toppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4209,
                      "src": "5834:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4643,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5794:53:24",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 4641,
                      "name": "adminToppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4211,
                      "src": "5813:18:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5777:70:24"
                },
                {
                  "assignments": [
                    4646
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4646,
                      "name": "toTop",
                      "nodeType": "VariableDeclaration",
                      "scope": 4666,
                      "src": "5857:13:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4645,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5857:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4654,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4650,
                              "name": "_wallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4625,
                              "src": "5892:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5884:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5884:16:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 4652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5884:24:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4647,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4637,
                        "src": "5873:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4648,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16437,
                      "src": "5873:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5873:36:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5857:52:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4658,
                        "name": "toTop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4646,
                        "src": "5936:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4655,
                        "name": "_wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4625,
                        "src": "5919:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 4657,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5919:16:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5919:23:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4660,
                  "nodeType": "ExpressionStatement",
                  "src": "5919:23:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4662,
                        "name": "_wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4625,
                        "src": "5970:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4663,
                        "name": "toTop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4646,
                        "src": "5979:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4661,
                      "name": "WalletTopped",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4239,
                      "src": "5957:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5957:28:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4665,
                  "nodeType": "EmitStatement",
                  "src": "5952:33:24"
                }
              ]
            },
            "documentation": null,
            "id": 4667,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_topWallet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4625,
                  "name": "_wallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 4667,
                  "src": "5689:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4624,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5689:15:24",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5688:25:24"
            },
            "returnParameters": {
              "id": 4627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5723:0:24"
            },
            "scope": 4797,
            "src": "5669:323:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4714,
              "nodeType": "Block",
              "src": "6530:270:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                          "typeString": "contract SignUpBonus"
                        },
                        "id": 4685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4681,
                          "name": "bonus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4207,
                          "src": "6548:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                            "typeString": "contract SignUpBonus"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4683,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6569:1:24",
                              "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": 4682,
                            "name": "SignUpBonus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3736,
                            "src": "6557:11:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SignUpBonus_$3736_$",
                              "typeString": "type(contract SignUpBonus)"
                            }
                          },
                          "id": 4684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6557:14:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                            "typeString": "contract SignUpBonus"
                          }
                        },
                        "src": "6548:23:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5369676e557020626f6e757320686173206e6f74206265656e2073657420796574",
                        "id": 4686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6573:35:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3e7637bc799b019a97d4ecaafb63abc7344ce6038e57d9af1c3b6087bcef7134",
                          "typeString": "literal_string \"SignUp bonus has not been set yet\""
                        },
                        "value": "SignUp bonus has not been set yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3e7637bc799b019a97d4ecaafb63abc7344ce6038e57d9af1c3b6087bcef7134",
                          "typeString": "literal_string \"SignUp bonus has not been set yet\""
                        }
                      ],
                      "id": 4680,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "6540:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6540:69:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4688,
                  "nodeType": "ExpressionStatement",
                  "src": "6540:69:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4691,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4669,
                          "src": "6647:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4689,
                          "name": "identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4202,
                          "src": "6624:8:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Identity_$5310",
                            "typeString": "contract Identity"
                          }
                        },
                        "id": 4690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isWhitelisted",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5005,
                        "src": "6624:22:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view external returns (bool)"
                        }
                      },
                      "id": 4692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6624:29:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 4693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6657:5:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "6624:38:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4701,
                  "nodeType": "IfStatement",
                  "src": "6620:91:24",
                  "trueBody": {
                    "id": 4700,
                    "nodeType": "Block",
                    "src": "6664:47:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4696,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4669,
                              "src": "6688:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4697,
                              "name": "_did",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4673,
                              "src": "6695:4:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4695,
                            "name": "whitelist",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4536,
                            "src": "6678:9:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (address,string memory)"
                            }
                          },
                          "id": 4698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6678:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4699,
                        "nodeType": "ExpressionStatement",
                        "src": "6678:22:24"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4702,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4671,
                      "src": "6725:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4703,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6735:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6725:11:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4713,
                  "nodeType": "IfStatement",
                  "src": "6721:73:24",
                  "trueBody": {
                    "id": 4712,
                    "nodeType": "Block",
                    "src": "6738:56:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4708,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4669,
                              "src": "6768:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4709,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4671,
                              "src": "6775:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4705,
                              "name": "bonus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4207,
                              "src": "6752:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                                "typeString": "contract SignUpBonus"
                              }
                            },
                            "id": 4707,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "awardUser",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3735,
                            "src": "6752:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 4710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6752:31:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4711,
                        "nodeType": "ExpressionStatement",
                        "src": "6752:31:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4715,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4676,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4675,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "6507:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6507:9:24"
              },
              {
                "arguments": null,
                "id": 4678,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4677,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "6517:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6517:12:24"
              }
            ],
            "name": "whitelistAndAwardUser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4669,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4715,
                  "src": "6427:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4668,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6427:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4671,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4715,
                  "src": "6450:15:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4670,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6450:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4673,
                  "name": "_did",
                  "nodeType": "VariableDeclaration",
                  "scope": 4715,
                  "src": "6475:18:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4672,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6475:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6417:82:24"
            },
            "returnParameters": {
              "id": 4679,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6530:0:24"
            },
            "scope": 4797,
            "src": "6387:413:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4747,
              "nodeType": "Block",
              "src": "7101:168:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                          "typeString": "contract SignUpBonus"
                        },
                        "id": 4731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4727,
                          "name": "bonus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4207,
                          "src": "7119:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                            "typeString": "contract SignUpBonus"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4729,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7140:1:24",
                              "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": 4728,
                            "name": "SignUpBonus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3736,
                            "src": "7128:11:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SignUpBonus_$3736_$",
                              "typeString": "type(contract SignUpBonus)"
                            }
                          },
                          "id": 4730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7128:14:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                            "typeString": "contract SignUpBonus"
                          }
                        },
                        "src": "7119:23:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5369676e557020626f6e757320686173206e6f74206265656e2073657420796574",
                        "id": 4732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7144:35:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3e7637bc799b019a97d4ecaafb63abc7344ce6038e57d9af1c3b6087bcef7134",
                          "typeString": "literal_string \"SignUp bonus has not been set yet\""
                        },
                        "value": "SignUp bonus has not been set yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3e7637bc799b019a97d4ecaafb63abc7344ce6038e57d9af1c3b6087bcef7134",
                          "typeString": "literal_string \"SignUp bonus has not been set yet\""
                        }
                      ],
                      "id": 4726,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "7111:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7111:69:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4734,
                  "nodeType": "ExpressionStatement",
                  "src": "7111:69:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4735,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4719,
                      "src": "7194:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7204:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7194:11:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4746,
                  "nodeType": "IfStatement",
                  "src": "7190:73:24",
                  "trueBody": {
                    "id": 4745,
                    "nodeType": "Block",
                    "src": "7207:56:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4741,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4717,
                              "src": "7237:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4742,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4719,
                              "src": "7244:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4738,
                              "name": "bonus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4207,
                              "src": "7221:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                                "typeString": "contract SignUpBonus"
                              }
                            },
                            "id": 4740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "awardUser",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3735,
                            "src": "7221:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 4743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7221:31:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4744,
                        "nodeType": "ExpressionStatement",
                        "src": "7221:31:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Function to award user with pending bonuses,\ncan only be done by admin\n@param _user The address to transfer to and whitelist\n@param _amount the bonus amount to give",
            "id": 4748,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4722,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4721,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "7078:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7078:9:24"
              },
              {
                "arguments": null,
                "id": 4724,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4723,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "7088:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7088:12:24"
              }
            ],
            "name": "awardUser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4720,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4717,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4748,
                  "src": "7039:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4716,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7039:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4719,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4748,
                  "src": "7054:15:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4718,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7054:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7038:32:24"
            },
            "returnParameters": {
              "id": 4725,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7101:0:24"
            },
            "scope": 4797,
            "src": "7020:249:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4784,
              "nodeType": "Block",
              "src": "7847:192:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 4765,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4761,
                          "src": "7912:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4766,
                          "name": "returnValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4763,
                          "src": "7921:11:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "id": 4767,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "7911:22:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4773,
                          "name": "_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4752,
                          "src": "7965:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4771,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4754,
                            "src": "7957:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4768,
                              "name": "_contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4750,
                              "src": "7936:9:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4769,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "7936:14:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7936:20:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
                            "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                          }
                        },
                        "id": 4772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7936:28:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 4774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7936:35:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "src": "7911:60:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4776,
                  "nodeType": "ExpressionStatement",
                  "src": "7911:60:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4778,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4750,
                        "src": "7998:9:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4779,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4752,
                        "src": "8009:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4780,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4754,
                        "src": "8016:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4781,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4761,
                        "src": "8024:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4777,
                      "name": "GenericCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4249,
                      "src": "7986:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,bytes memory,uint256,bool)"
                      }
                    },
                    "id": 4782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7986:46:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4783,
                  "nodeType": "EmitStatement",
                  "src": "7981:51:24"
                }
              ]
            },
            "documentation": "@dev perform a generic call to an arbitrary contract\n@param _contract  the contract's address to call\n@param _data ABI-encoded contract call to call `_contract` address.\n@param _value value (ETH) to transfer with the transaction\n@return bool    success or fail\n        bytes - the return bytes of the called contract's function.",
            "id": 4785,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4757,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4756,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "7775:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7775:9:24"
              },
              {
                "arguments": null,
                "id": 4759,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4758,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "7785:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7785:12:24"
              }
            ],
            "name": "genericCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4750,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7692:17:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4749,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7692:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4752,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7719:18:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4751,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7719:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4754,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7747:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4753,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7747:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7682:85:24"
            },
            "returnParameters": {
              "id": 4764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4761,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7807:12:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4760,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7807:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4763,
                  "name": "returnValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7821:24:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4762,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7821:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7806:40:24"
            },
            "scope": 4797,
            "src": "7662:377:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4795,
              "nodeType": "Block",
              "src": "8150:41:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4791,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17345,
                          "src": "8173:3:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8173:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 4790,
                      "name": "selfdestruct",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17353,
                      "src": "8160:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable)"
                      }
                    },
                    "id": 4793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8160:24:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4794,
                  "nodeType": "ExpressionStatement",
                  "src": "8160:24:24"
                }
              ]
            },
            "documentation": "@dev destroy wallet and return funds to owner",
            "id": 4796,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4788,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4787,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16525,
                  "src": "8140:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8140:9:24"
              }
            ],
            "name": "destroy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4786,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8130:2:24"
            },
            "returnParameters": {
              "id": 4789,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8150:0:24"
            },
            "scope": 4797,
            "src": "8114:77:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4798,
        "src": "375:7818:24"
      }
    ],
    "src": "0:8194:24"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/fuseFaucet/FuseFaucet.sol",
    "exportedSymbols": {
      "FuseFaucet": [
        4797
      ]
    },
    "id": 4798,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4182,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:24"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "openzeppelin-solidity/contracts/access/Roles.sol",
        "id": 4183,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 15916,
        "src": "25:58:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 4184,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 16592,
        "src": "84:63:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 4185,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 16483,
        "src": "148:59:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol",
        "file": "../identity/Identity.sol",
        "id": 4186,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 5311,
        "src": "209:34:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SignUpBonus.sol",
        "file": "../dao/schemes/SignUpBonus.sol",
        "id": 4187,
        "nodeType": "ImportDirective",
        "scope": 4798,
        "sourceUnit": 3737,
        "src": "244:40:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4188,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16591,
              "src": "398:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$16591",
                "typeString": "contract Ownable"
              }
            },
            "id": 4189,
            "nodeType": "InheritanceSpecifier",
            "src": "398:7:24"
          }
        ],
        "contractDependencies": [
          16591
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4797,
        "linearizedBaseContracts": [
          4797,
          16591
        ],
        "name": "FuseFaucet",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4192,
            "libraryName": {
              "contractScope": null,
              "id": 4190,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15915,
              "src": "418:5:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$15915",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "412:27:24",
            "typeName": {
              "contractScope": null,
              "id": 4191,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15828,
              "src": "428:10:24",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$15828_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "id": 4195,
            "libraryName": {
              "contractScope": null,
              "id": 4193,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16482,
              "src": "450:8:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$16482",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "444:27:24",
            "typeName": {
              "id": 4194,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "463:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 4197,
            "name": "admins",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "477:25:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$15828_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 4196,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15828,
              "src": "477:10:24",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$15828_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 4200,
            "name": "adminlist",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "509:27:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
              "typeString": "address payable[]"
            },
            "typeName": {
              "baseType": {
                "id": 4198,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "509:15:24",
                "stateMutability": "payable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address_payable",
                  "typeString": "address payable"
                }
              },
              "id": 4199,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "509:17:24",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                "typeString": "address payable[]"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4202,
            "name": "identity",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "543:17:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Identity_$5310",
              "typeString": "contract Identity"
            },
            "typeName": {
              "contractScope": null,
              "id": 4201,
              "name": "Identity",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5310,
              "src": "543:8:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Identity_$5310",
                "typeString": "contract Identity"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4207,
            "name": "bonus",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "567:34:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_SignUpBonus_$3736",
              "typeString": "contract SignUpBonus"
            },
            "typeName": {
              "contractScope": null,
              "id": 4203,
              "name": "SignUpBonus",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3736,
              "src": "567:11:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                "typeString": "contract SignUpBonus"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "30",
                  "id": 4205,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "599:1:24",
                  "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": 4204,
                "name": "SignUpBonus",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 3736,
                "src": "587:11:24",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_contract$_SignUpBonus_$3736_$",
                  "typeString": "type(contract SignUpBonus)"
                }
              },
              "id": 4206,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "587:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                "typeString": "contract SignUpBonus"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4209,
            "name": "toppingAmount",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "608:28:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4208,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "608:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4211,
            "name": "adminToppingAmount",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "642:33:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4210,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "642:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4213,
            "name": "toppingTimes",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "682:27:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4212,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "682:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4215,
            "name": "currentDay",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "715:25:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4214,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "715:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4217,
            "name": "periodStart",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "746:26:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4216,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "746:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4223,
            "name": "toppings",
            "nodeType": "VariableDeclaration",
            "scope": 4797,
            "src": "779:56:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(uint256 => mapping(address => uint256))"
            },
            "typeName": {
              "id": 4222,
              "keyType": {
                "id": 4218,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "787:7:24",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "779:47:24",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(uint256 => mapping(address => uint256))"
              },
              "valueType": {
                "id": 4221,
                "keyType": {
                  "id": 4219,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "806:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "798:27:24",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 4220,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "817:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4228,
            "name": "AdminsAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4226,
                  "indexed": true,
                  "name": "admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4228,
                  "src": "860:32:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4224,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "860:15:24",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4225,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "860:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "859:34:24"
            },
            "src": "842:52:24"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4233,
            "name": "AdminsRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4231,
                  "indexed": true,
                  "name": "admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4233,
                  "src": "919:24:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4229,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "919:7:24",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 4230,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "919:9:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "918:26:24"
            },
            "src": "899:46:24"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4239,
            "name": "WalletTopped",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4235,
                  "indexed": true,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "969:20:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4234,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "969:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4237,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "991:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4236,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "991:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "968:38:24"
            },
            "src": "950:57:24"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4249,
            "name": "GenericCall",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4241,
                  "indexed": true,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 4249,
                  "src": "1039:25:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1039:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4243,
                  "indexed": false,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4249,
                  "src": "1074:11:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4242,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1074:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4245,
                  "indexed": false,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 4249,
                  "src": "1095:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1095:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4247,
                  "indexed": false,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 4249,
                  "src": "1119:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4246,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1119:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1029:109:24"
            },
            "src": "1012:127:24"
          },
          {
            "body": {
              "id": 4293,
              "nodeType": "Block",
              "src": "1303:298:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4261,
                      "name": "identity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4202,
                      "src": "1313:8:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Identity_$5310",
                        "typeString": "contract Identity"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4262,
                      "name": "_identity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4258,
                      "src": "1324:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Identity_$5310",
                        "typeString": "contract Identity"
                      }
                    },
                    "src": "1313:20:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$5310",
                      "typeString": "contract Identity"
                    }
                  },
                  "id": 4264,
                  "nodeType": "ExpressionStatement",
                  "src": "1313:20:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4265,
                      "name": "toppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4209,
                      "src": "1344:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4266,
                      "name": "_toppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4254,
                      "src": "1360:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1344:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4268,
                  "nodeType": "ExpressionStatement",
                  "src": "1344:30:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4269,
                      "name": "adminToppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4211,
                      "src": "1384:18:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_rational_9000000000000000_by_1",
                        "typeString": "int_const 9000000000000000"
                      },
                      "id": 4272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "hexValue": "316539",
                        "id": 4270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1405:3:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000000_by_1",
                          "typeString": "int_const 1000000000"
                        },
                        "value": "1e9"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "396536",
                        "id": 4271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1411:3:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_9000000_by_1",
                          "typeString": "int_const 9000000"
                        },
                        "value": "9e6"
                      },
                      "src": "1405:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_9000000000000000_by_1",
                        "typeString": "int_const 9000000000000000"
                      }
                    },
                    "src": "1384:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4274,
                  "nodeType": "ExpressionStatement",
                  "src": "1384:30:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4275,
                      "name": "toppingTimes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4213,
                      "src": "1462:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4276,
                      "name": "_toppingTimes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4256,
                      "src": "1477:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1462:28:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4278,
                  "nodeType": "ExpressionStatement",
                  "src": "1462:28:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4279,
                      "name": "periodStart",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4217,
                      "src": "1500:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4280,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17347,
                      "src": "1514:3:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1500:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4282,
                  "nodeType": "ExpressionStatement",
                  "src": "1500:17:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4283,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4252,
                        "src": "1532:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      },
                      "id": 4284,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1532:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1549:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1532:18:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4292,
                  "nodeType": "IfStatement",
                  "src": "1528:67:24",
                  "trueBody": {
                    "id": 4291,
                    "nodeType": "Block",
                    "src": "1552:43:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4288,
                              "name": "_admins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4252,
                              "src": "1576:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                "typeString": "address payable[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                "typeString": "address payable[] memory"
                              }
                            ],
                            "id": 4287,
                            "name": "addAdmins",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4402,
                            "src": "1566:9:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_payable_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address payable[] memory)"
                            }
                          },
                          "id": 4289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1566:18:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4290,
                        "nodeType": "ExpressionStatement",
                        "src": "1566:18:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4294,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4252,
                  "name": "_admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "1166:32:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4250,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1166:15:24",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4251,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1166:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4254,
                  "name": "_toppingAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "1208:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4253,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1208:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4256,
                  "name": "_toppingTimes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "1240:21:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4255,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1240:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4258,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "1271:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$5310",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4257,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5310,
                    "src": "1271:8:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$5310",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1156:139:24"
            },
            "returnParameters": {
              "id": 4260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1303:0:24"
            },
            "scope": 4797,
            "src": "1145:456:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4305,
              "nodeType": "Block",
              "src": "1698:79:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4298,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17345,
                              "src": "1724:3:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4299,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1724:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 4297,
                          "name": "isAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4517,
                          "src": "1716:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 4300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1716:19:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616c6c6572206973206e6f742061646d696e",
                        "id": 4301,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1737:21:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b7254d08cc38f034b0ac17414bcb2690b039dd5f9d2a2ec02802a3d41869c288",
                          "typeString": "literal_string \"Caller is not admin\""
                        },
                        "value": "Caller is not admin"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b7254d08cc38f034b0ac17414bcb2690b039dd5f9d2a2ec02802a3d41869c288",
                          "typeString": "literal_string \"Caller is not admin\""
                        }
                      ],
                      "id": 4296,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "1708:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1708:51:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4303,
                  "nodeType": "ExpressionStatement",
                  "src": "1708:51:24"
                },
                {
                  "id": 4304,
                  "nodeType": "PlaceholderStatement",
                  "src": "1769:1:24"
                }
              ]
            },
            "documentation": null,
            "id": 4306,
            "name": "onlyAdmin",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4295,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1695:2:24"
            },
            "src": "1677:100:24",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4329,
              "nodeType": "Block",
              "src": "1807:150:24",
              "statements": [
                {
                  "id": 4308,
                  "nodeType": "PlaceholderStatement",
                  "src": "1817:1:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4309,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17345,
                            "src": "1832:3:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4310,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1832:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 4311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1832:18:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 4314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1877:1:24",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4312,
                            "name": "adminToppingAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4211,
                            "src": "1854:18:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16413,
                          "src": "1854:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 4315,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1854:25:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1832:47:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4318,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17345,
                            "src": "1891:3:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1891:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 4317,
                        "name": "isAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "1883:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 4320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1883:19:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1832:70:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4328,
                  "nodeType": "IfStatement",
                  "src": "1828:123:24",
                  "trueBody": {
                    "id": 4327,
                    "nodeType": "Block",
                    "src": "1904:47:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4323,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17345,
                                "src": "1929:3:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1929:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4322,
                            "name": "_topWallet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4667,
                            "src": "1918:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                              "typeString": "function (address payable)"
                            }
                          },
                          "id": 4325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1918:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4326,
                        "nodeType": "ExpressionStatement",
                        "src": "1918:22:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4330,
            "name": "reimburseGas",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4307,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1804:2:24"
            },
            "src": "1783:174:24",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4333,
              "nodeType": "Block",
              "src": "1991:2:24",
              "statements": []
            },
            "documentation": null,
            "id": 4334,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4331,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1971:2:24"
            },
            "returnParameters": {
              "id": 4332,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1991:0:24"
            },
            "scope": 4797,
            "src": "1963:30:24",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4347,
              "nodeType": "Block",
              "src": "2086:61:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4337,
                      "name": "currentDay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4215,
                      "src": "2096:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4340,
                                "name": "periodStart",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4217,
                                "src": "2118:11:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4338,
                                "name": "now",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17347,
                                "src": "2110:3:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4339,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16437,
                              "src": "2110:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4341,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2110:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 4342,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2109:22:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 4343,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2134:6:24",
                        "subdenomination": "days",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        },
                        "value": "1"
                      },
                      "src": "2109:31:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2096:44:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4346,
                  "nodeType": "ExpressionStatement",
                  "src": "2096:44:24"
                }
              ]
            },
            "documentation": null,
            "id": 4348,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setDay",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4335,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2074:2:24"
            },
            "returnParameters": {
              "id": 4336,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2086:0:24"
            },
            "scope": 4797,
            "src": "2059:88:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4359,
              "nodeType": "Block",
              "src": "2216:31:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4355,
                      "name": "bonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4207,
                      "src": "2226:5:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                        "typeString": "contract SignUpBonus"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4356,
                      "name": "_bonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4350,
                      "src": "2234:6:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                        "typeString": "contract SignUpBonus"
                      }
                    },
                    "src": "2226:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                      "typeString": "contract SignUpBonus"
                    }
                  },
                  "id": 4358,
                  "nodeType": "ExpressionStatement",
                  "src": "2226:14:24"
                }
              ]
            },
            "documentation": null,
            "id": 4360,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4353,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4352,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16525,
                  "src": "2206:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2206:9:24"
              }
            ],
            "name": "setBonusContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4351,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4350,
                  "name": "_bonus",
                  "nodeType": "VariableDeclaration",
                  "scope": 4360,
                  "src": "2179:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                    "typeString": "contract SignUpBonus"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4349,
                    "name": "SignUpBonus",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3736,
                    "src": "2179:11:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                      "typeString": "contract SignUpBonus"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2178:20:24"
            },
            "returnParameters": {
              "id": 4354,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2216:0:24"
            },
            "scope": 4797,
            "src": "2153:94:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4401,
              "nodeType": "Block",
              "src": "2487:184:24",
              "statements": [
                {
                  "body": {
                    "id": 4395,
                    "nodeType": "Block",
                    "src": "2542:88:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4382,
                                "name": "_admins",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4363,
                                "src": "2567:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                  "typeString": "address payable[] memory"
                                }
                              },
                              "id": 4384,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4383,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4369,
                                "src": "2575:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2567:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4379,
                              "name": "admins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4197,
                              "src": "2556:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Role_$15828_storage",
                                "typeString": "struct Roles.Role storage ref"
                              }
                            },
                            "id": 4381,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15860,
                            "src": "2556:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$15828_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$15828_storage_ptr_$",
                              "typeString": "function (struct Roles.Role storage pointer,address)"
                            }
                          },
                          "id": 4385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2556:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4386,
                        "nodeType": "ExpressionStatement",
                        "src": "2556:22:24"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4390,
                                "name": "_admins",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4363,
                                "src": "2608:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                  "typeString": "address payable[] memory"
                                }
                              },
                              "id": 4392,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4391,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4369,
                                "src": "2616:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2608:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4387,
                              "name": "adminlist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4200,
                              "src": "2593:9:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                                "typeString": "address payable[] storage ref"
                              }
                            },
                            "id": 4389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2593:14:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_payable_$returns$_t_uint256_$",
                              "typeString": "function (address payable) returns (uint256)"
                            }
                          },
                          "id": 4393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2593:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4394,
                        "nodeType": "ExpressionStatement",
                        "src": "2593:26:24"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4372,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4369,
                      "src": "2517:1:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4373,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4363,
                        "src": "2521:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      },
                      "id": 4374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2521:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2517:18:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4396,
                  "initializationExpression": {
                    "assignments": [
                      4369
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4369,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4396,
                        "src": "2502:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4368,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2502:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4371,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2514:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2502:13:24"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4377,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2537:3:24",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4376,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4369,
                        "src": "2537:1:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4378,
                    "nodeType": "ExpressionStatement",
                    "src": "2537:3:24"
                  },
                  "nodeType": "ForStatement",
                  "src": "2497:133:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4398,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4363,
                        "src": "2656:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      ],
                      "id": 4397,
                      "name": "AdminsAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4228,
                      "src": "2644:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_address_payable_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address payable[] memory)"
                      }
                    },
                    "id": 4399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2644:20:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4400,
                  "nodeType": "EmitStatement",
                  "src": "2639:25:24"
                }
              ]
            },
            "documentation": null,
            "id": 4402,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4366,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4365,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16525,
                  "src": "2477:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2477:9:24"
              }
            ],
            "name": "addAdmins",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4363,
                  "name": "_admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4402,
                  "src": "2436:32:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4361,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2436:15:24",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4362,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2436:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2435:34:24"
            },
            "returnParameters": {
              "id": 4367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2487:0:24"
            },
            "scope": 4797,
            "src": "2417:254:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4435,
              "nodeType": "Block",
              "src": "2912:148:24",
              "statements": [
                {
                  "body": {
                    "id": 4429,
                    "nodeType": "Block",
                    "src": "2967:50:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4424,
                                "name": "_admins",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4405,
                                "src": "2995:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 4426,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4425,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4411,
                                "src": "3003:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2995:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4421,
                              "name": "admins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4197,
                              "src": "2981:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Role_$15828_storage",
                                "typeString": "struct Roles.Role storage ref"
                              }
                            },
                            "id": 4423,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15891,
                            "src": "2981:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$15828_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$15828_storage_ptr_$",
                              "typeString": "function (struct Roles.Role storage pointer,address)"
                            }
                          },
                          "id": 4427,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2981:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4428,
                        "nodeType": "ExpressionStatement",
                        "src": "2981:25:24"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4414,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4411,
                      "src": "2942:1:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4415,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4405,
                        "src": "2946:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 4416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2946:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2942:18:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4430,
                  "initializationExpression": {
                    "assignments": [
                      4411
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4411,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4430,
                        "src": "2927:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4410,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2927:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4413,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4412,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2939:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2927:13:24"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2962:3:24",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4418,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4411,
                        "src": "2962:1:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4420,
                    "nodeType": "ExpressionStatement",
                    "src": "2962:3:24"
                  },
                  "nodeType": "ForStatement",
                  "src": "2922:95:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4432,
                        "name": "_admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4405,
                        "src": "3045:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 4431,
                      "name": "AdminsRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4233,
                      "src": "3031:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory)"
                      }
                    },
                    "id": 4433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3031:22:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4434,
                  "nodeType": "EmitStatement",
                  "src": "3026:27:24"
                }
              ]
            },
            "documentation": null,
            "id": 4436,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4408,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4407,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16525,
                  "src": "2902:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2902:9:24"
              }
            ],
            "name": "removeAdmins",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4405,
                  "name": "_admins",
                  "nodeType": "VariableDeclaration",
                  "scope": 4436,
                  "src": "2869:24:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4403,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2869:7:24",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 4404,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2869:9:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2868:26:24"
            },
            "returnParameters": {
              "id": 4409,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2912:0:24"
            },
            "scope": 4797,
            "src": "2847:213:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4488,
              "nodeType": "Block",
              "src": "3182:297:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4449,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4446,
                            "name": "adminlist",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4200,
                            "src": "3200:9:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                              "typeString": "address payable[] storage ref"
                            }
                          },
                          "id": 4447,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3200:16:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4448,
                          "name": "startIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4438,
                          "src": "3219:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3200:29:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "41646d696e206c69737420697320656d707479",
                        "id": 4450,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3231:21:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f7fe5c3098719b10144bc233527215dc7e56e65cd1757a1eeae2dfe810c76681",
                          "typeString": "literal_string \"Admin list is empty\""
                        },
                        "value": "Admin list is empty"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f7fe5c3098719b10144bc233527215dc7e56e65cd1757a1eeae2dfe810c76681",
                          "typeString": "literal_string \"Admin list is empty\""
                        }
                      ],
                      "id": 4445,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "3192:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3192:61:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4452,
                  "nodeType": "ExpressionStatement",
                  "src": "3192:61:24"
                },
                {
                  "body": {
                    "id": 4486,
                    "nodeType": "Block",
                    "src": "3337:136:24",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4469,
                                "name": "adminlist",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4200,
                                "src": "3355:9:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                                  "typeString": "address payable[] storage ref"
                                }
                              },
                              "id": 4471,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4470,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4454,
                                "src": "3365:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3355:12:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 4472,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3355:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 4475,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3402:1:24",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4473,
                                "name": "adminToppingAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4211,
                                "src": "3379:18:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4474,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "div",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16413,
                              "src": "3379:22:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4476,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3379:25:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3355:49:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4485,
                        "nodeType": "IfStatement",
                        "src": "3351:112:24",
                        "trueBody": {
                          "id": 4484,
                          "nodeType": "Block",
                          "src": "3406:57:24",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 4479,
                                      "name": "adminlist",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4200,
                                      "src": "3435:9:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                                        "typeString": "address payable[] storage ref"
                                      }
                                    },
                                    "id": 4481,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 4480,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4454,
                                      "src": "3445:1:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3435:12:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 4478,
                                  "name": "_topWallet",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4667,
                                  "src": "3424:10:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                                    "typeString": "function (address payable)"
                                  }
                                },
                                "id": 4482,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3424:24:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4483,
                              "nodeType": "ExpressionStatement",
                              "src": "3424:24:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4457,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4454,
                            "src": "3293:1:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4458,
                              "name": "adminlist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4200,
                              "src": "3297:9:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_storage",
                                "typeString": "address payable[] storage ref"
                              }
                            },
                            "id": 4459,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3297:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3293:20:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4461,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4454,
                            "src": "3317:1:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4462,
                            "name": "endIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4440,
                            "src": "3321:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3317:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3293:36:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 4465,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3292:38:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4487,
                  "initializationExpression": {
                    "assignments": [
                      4454
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4454,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4487,
                        "src": "3268:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4453,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3268:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4456,
                    "initialValue": {
                      "argumentTypes": null,
                      "id": 4455,
                      "name": "startIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4438,
                      "src": "3280:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3268:22:24"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3332:3:24",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4466,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4454,
                        "src": "3332:1:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4468,
                    "nodeType": "ExpressionStatement",
                    "src": "3332:3:24"
                  },
                  "nodeType": "ForStatement",
                  "src": "3263:210:24"
                }
              ]
            },
            "documentation": "@dev top admins",
            "id": 4489,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4443,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4442,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "3169:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3169:12:24"
              }
            ],
            "name": "topAdmins",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4438,
                  "name": "startIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 4489,
                  "src": "3124:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4437,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3124:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4440,
                  "name": "endIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 4489,
                  "src": "3144:16:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4439,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3144:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3123:38:24"
            },
            "returnParameters": {
              "id": 4444,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3182:0:24"
            },
            "scope": 4797,
            "src": "3105:374:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4503,
              "nodeType": "Block",
              "src": "3588:55:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4497,
                        "name": "startIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4491,
                        "src": "3608:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4498,
                          "name": "startIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4491,
                          "src": "3620:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3530",
                          "id": 4499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3633:2:24",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_50_by_1",
                            "typeString": "int_const 50"
                          },
                          "value": "50"
                        },
                        "src": "3620:15:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4496,
                      "name": "topAdmins",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4489,
                        4504
                      ],
                      "referencedDeclaration": 4489,
                      "src": "3598:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 4501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3598:38:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4502,
                  "nodeType": "ExpressionStatement",
                  "src": "3598:38:24"
                }
              ]
            },
            "documentation": null,
            "id": 4504,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4494,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4493,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "3575:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3575:12:24"
              }
            ],
            "name": "topAdmins",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4491,
                  "name": "startIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 4504,
                  "src": "3548:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4490,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3548:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3547:20:24"
            },
            "returnParameters": {
              "id": 4495,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3588:0:24"
            },
            "scope": 4797,
            "src": "3529:114:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4516,
              "nodeType": "Block",
              "src": "3877:41:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4513,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4506,
                        "src": "3905:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4511,
                        "name": "admins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "3894:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$15828_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 4512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15914,
                      "src": "3894:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$15828_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$15828_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 4514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3894:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4510,
                  "id": 4515,
                  "nodeType": "Return",
                  "src": "3887:24:24"
                }
              ]
            },
            "documentation": "@dev Function to check if given address is an admin\n@param _user the address to check\n@return A bool indicating if user is an admin",
            "id": 4517,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4506,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4517,
                  "src": "3835:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4505,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3835:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3834:15:24"
            },
            "returnParameters": {
              "id": 4510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4509,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4517,
                  "src": "3871:4:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4508,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3871:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3870:6:24"
            },
            "scope": 4797,
            "src": "3818:100:24",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4535,
              "nodeType": "Block",
              "src": "4170:60:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4531,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4519,
                        "src": "4211:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4532,
                        "name": "_did",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4521,
                        "src": "4218:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4528,
                        "name": "identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4202,
                        "src": "4180:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$5310",
                          "typeString": "contract Identity"
                        }
                      },
                      "id": 4530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addWhitelistedWithDID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4948,
                      "src": "4180:30:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory) external"
                      }
                    },
                    "id": 4533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4180:43:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4534,
                  "nodeType": "ExpressionStatement",
                  "src": "4180:43:24"
                }
              ]
            },
            "documentation": null,
            "id": 4536,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4524,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4523,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "4147:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4147:9:24"
              },
              {
                "arguments": null,
                "id": 4526,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4525,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "4157:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4157:12:24"
              }
            ],
            "name": "whitelist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4519,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4536,
                  "src": "4105:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4518,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4105:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4521,
                  "name": "_did",
                  "nodeType": "VariableDeclaration",
                  "scope": 4536,
                  "src": "4120:18:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4520,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4120:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4104:35:24"
            },
            "returnParameters": {
              "id": 4527,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4170:0:24"
            },
            "scope": 4797,
            "src": "4086:144:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4551,
              "nodeType": "Block",
              "src": "4473:50:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4548,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4538,
                        "src": "4510:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4545,
                        "name": "identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4202,
                        "src": "4483:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$5310",
                          "typeString": "contract Identity"
                        }
                      },
                      "id": 4547,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "removeWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4964,
                      "src": "4483:26:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 4549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4483:33:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4550,
                  "nodeType": "ExpressionStatement",
                  "src": "4483:33:24"
                }
              ]
            },
            "documentation": null,
            "id": 4552,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4541,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4540,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "4450:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4450:9:24"
              },
              {
                "arguments": null,
                "id": 4543,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4542,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "4460:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4460:12:24"
              }
            ],
            "name": "removeWhitelist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4538,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4552,
                  "src": "4428:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4537,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4428:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4427:15:24"
            },
            "returnParameters": {
              "id": 4544,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4473:0:24"
            },
            "scope": 4797,
            "src": "4403:120:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4567,
              "nodeType": "Block",
              "src": "4755:47:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4564,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4554,
                        "src": "4789:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4561,
                        "name": "identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4202,
                        "src": "4765:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$5310",
                          "typeString": "contract Identity"
                        }
                      },
                      "id": 4563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addBlacklisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5039,
                      "src": "4765:23:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 4565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4765:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4566,
                  "nodeType": "ExpressionStatement",
                  "src": "4765:30:24"
                }
              ]
            },
            "documentation": null,
            "id": 4568,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4557,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4556,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "4732:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4732:9:24"
              },
              {
                "arguments": null,
                "id": 4559,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4558,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "4742:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4742:12:24"
              }
            ],
            "name": "blacklist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4554,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4568,
                  "src": "4710:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4553,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4710:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4709:15:24"
            },
            "returnParameters": {
              "id": 4560,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4755:0:24"
            },
            "scope": 4797,
            "src": "4691:111:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4583,
              "nodeType": "Block",
              "src": "5045:50:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4580,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4570,
                        "src": "5082:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4577,
                        "name": "identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4202,
                        "src": "5055:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$5310",
                          "typeString": "contract Identity"
                        }
                      },
                      "id": 4579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "removeBlacklisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5061,
                      "src": "5055:26:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 4581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5055:33:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4582,
                  "nodeType": "ExpressionStatement",
                  "src": "5055:33:24"
                }
              ]
            },
            "documentation": null,
            "id": 4584,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4573,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4572,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "5022:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5022:9:24"
              },
              {
                "arguments": null,
                "id": 4575,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4574,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "5032:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5032:12:24"
              }
            ],
            "name": "removeBlacklist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4571,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4570,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4584,
                  "src": "5000:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4569,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5000:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4999:15:24"
            },
            "returnParameters": {
              "id": 4576,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5045:0:24"
            },
            "scope": 4797,
            "src": "4975:120:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4622,
              "nodeType": "Block",
              "src": "5395:268:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4593,
                      "name": "setDay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4348,
                      "src": "5405:6:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 4594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5405:8:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4595,
                  "nodeType": "ExpressionStatement",
                  "src": "5405:8:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4597,
                              "name": "toppings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4223,
                              "src": "5444:8:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 4599,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4598,
                              "name": "currentDay",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4215,
                              "src": "5453:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5444:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4601,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4600,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4586,
                            "src": "5465:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5444:27:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4602,
                          "name": "toppingTimes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4213,
                          "src": "5474:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5444:42:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "557365722077616c6c657420686173206265656e20746f7070656420746f6f206d616e792074696d657320746f646179",
                        "id": 4604,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5500:50:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7ec0e3d44e3dfbd6a810932b5bc2a0c76ebc3cf59d9293162dc99895c8f056e7",
                          "typeString": "literal_string \"User wallet has been topped too many times today\""
                        },
                        "value": "User wallet has been topped too many times today"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7ec0e3d44e3dfbd6a810932b5bc2a0c76ebc3cf59d9293162dc99895c8f056e7",
                          "typeString": "literal_string \"User wallet has been topped too many times today\""
                        }
                      ],
                      "id": 4596,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "5423:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5423:137:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4606,
                  "nodeType": "ExpressionStatement",
                  "src": "5423:137:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4608,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4586,
                            "src": "5582:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 4607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5574:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4609,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5574:14:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 4610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5574:22:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "34",
                          "id": 4613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5618:1:24",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          },
                          "value": "4"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4611,
                          "name": "toppingAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4209,
                          "src": "5600:13:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4612,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16413,
                        "src": "5600:17:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5600:20:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5574:46:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4617,
                  "nodeType": "IfStatement",
                  "src": "5570:59:24",
                  "trueBody": {
                    "expression": null,
                    "functionReturnParameters": 4592,
                    "id": 4616,
                    "nodeType": "Return",
                    "src": "5622:7:24"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4619,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4586,
                        "src": "5650:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 4618,
                      "name": "_topWallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4667,
                      "src": "5639:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable)"
                      }
                    },
                    "id": 4620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5639:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4621,
                  "nodeType": "ExpressionStatement",
                  "src": "5639:17:24"
                }
              ]
            },
            "documentation": null,
            "id": 4623,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4589,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4588,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "5372:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5372:9:24"
              },
              {
                "arguments": null,
                "id": 4591,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4590,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "5382:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5382:12:24"
              }
            ],
            "name": "topWallet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4586,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4623,
                  "src": "5342:21:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4585,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5342:15:24",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5341:23:24"
            },
            "returnParameters": {
              "id": 4592,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5395:0:24"
            },
            "scope": 4797,
            "src": "5323:340:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4666,
              "nodeType": "Block",
              "src": "5723:269:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4628,
                          "name": "toppings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4223,
                          "src": "5733:8:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 4631,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4629,
                          "name": "currentDay",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4215,
                          "src": "5742:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5733:20:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4632,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4630,
                        "name": "_wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4625,
                        "src": "5754:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5733:29:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 4633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5766:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "5733:34:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4635,
                  "nodeType": "ExpressionStatement",
                  "src": "5733:34:24"
                },
                {
                  "assignments": [
                    4637
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4637,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4666,
                      "src": "5777:14:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4636,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5777:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4644,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4639,
                          "name": "_wallet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4625,
                          "src": "5802:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 4638,
                        "name": "isAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4517,
                        "src": "5794:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 4640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5794:16:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 4642,
                      "name": "toppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4209,
                      "src": "5834:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4643,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5794:53:24",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 4641,
                      "name": "adminToppingAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4211,
                      "src": "5813:18:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5777:70:24"
                },
                {
                  "assignments": [
                    4646
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4646,
                      "name": "toTop",
                      "nodeType": "VariableDeclaration",
                      "scope": 4666,
                      "src": "5857:13:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4645,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5857:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4654,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4650,
                              "name": "_wallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4625,
                              "src": "5892:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5884:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5884:16:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 4652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5884:24:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4647,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4637,
                        "src": "5873:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4648,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16437,
                      "src": "5873:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5873:36:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5857:52:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4658,
                        "name": "toTop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4646,
                        "src": "5936:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4655,
                        "name": "_wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4625,
                        "src": "5919:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 4657,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5919:16:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5919:23:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4660,
                  "nodeType": "ExpressionStatement",
                  "src": "5919:23:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4662,
                        "name": "_wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4625,
                        "src": "5970:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4663,
                        "name": "toTop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4646,
                        "src": "5979:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4661,
                      "name": "WalletTopped",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4239,
                      "src": "5957:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5957:28:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4665,
                  "nodeType": "EmitStatement",
                  "src": "5952:33:24"
                }
              ]
            },
            "documentation": null,
            "id": 4667,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_topWallet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4625,
                  "name": "_wallet",
                  "nodeType": "VariableDeclaration",
                  "scope": 4667,
                  "src": "5689:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4624,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5689:15:24",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5688:25:24"
            },
            "returnParameters": {
              "id": 4627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5723:0:24"
            },
            "scope": 4797,
            "src": "5669:323:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4714,
              "nodeType": "Block",
              "src": "6530:270:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                          "typeString": "contract SignUpBonus"
                        },
                        "id": 4685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4681,
                          "name": "bonus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4207,
                          "src": "6548:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                            "typeString": "contract SignUpBonus"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4683,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6569:1:24",
                              "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": 4682,
                            "name": "SignUpBonus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3736,
                            "src": "6557:11:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SignUpBonus_$3736_$",
                              "typeString": "type(contract SignUpBonus)"
                            }
                          },
                          "id": 4684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6557:14:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                            "typeString": "contract SignUpBonus"
                          }
                        },
                        "src": "6548:23:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5369676e557020626f6e757320686173206e6f74206265656e2073657420796574",
                        "id": 4686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6573:35:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3e7637bc799b019a97d4ecaafb63abc7344ce6038e57d9af1c3b6087bcef7134",
                          "typeString": "literal_string \"SignUp bonus has not been set yet\""
                        },
                        "value": "SignUp bonus has not been set yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3e7637bc799b019a97d4ecaafb63abc7344ce6038e57d9af1c3b6087bcef7134",
                          "typeString": "literal_string \"SignUp bonus has not been set yet\""
                        }
                      ],
                      "id": 4680,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "6540:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6540:69:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4688,
                  "nodeType": "ExpressionStatement",
                  "src": "6540:69:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4691,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4669,
                          "src": "6647:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4689,
                          "name": "identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4202,
                          "src": "6624:8:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Identity_$5310",
                            "typeString": "contract Identity"
                          }
                        },
                        "id": 4690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isWhitelisted",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5005,
                        "src": "6624:22:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view external returns (bool)"
                        }
                      },
                      "id": 4692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6624:29:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 4693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6657:5:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "6624:38:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4701,
                  "nodeType": "IfStatement",
                  "src": "6620:91:24",
                  "trueBody": {
                    "id": 4700,
                    "nodeType": "Block",
                    "src": "6664:47:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4696,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4669,
                              "src": "6688:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4697,
                              "name": "_did",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4673,
                              "src": "6695:4:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4695,
                            "name": "whitelist",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4536,
                            "src": "6678:9:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (address,string memory)"
                            }
                          },
                          "id": 4698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6678:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4699,
                        "nodeType": "ExpressionStatement",
                        "src": "6678:22:24"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4702,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4671,
                      "src": "6725:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4703,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6735:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6725:11:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4713,
                  "nodeType": "IfStatement",
                  "src": "6721:73:24",
                  "trueBody": {
                    "id": 4712,
                    "nodeType": "Block",
                    "src": "6738:56:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4708,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4669,
                              "src": "6768:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4709,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4671,
                              "src": "6775:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4705,
                              "name": "bonus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4207,
                              "src": "6752:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                                "typeString": "contract SignUpBonus"
                              }
                            },
                            "id": 4707,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "awardUser",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3735,
                            "src": "6752:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 4710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6752:31:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4711,
                        "nodeType": "ExpressionStatement",
                        "src": "6752:31:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4715,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4676,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4675,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "6507:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6507:9:24"
              },
              {
                "arguments": null,
                "id": 4678,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4677,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "6517:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6517:12:24"
              }
            ],
            "name": "whitelistAndAwardUser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4669,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4715,
                  "src": "6427:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4668,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6427:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4671,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4715,
                  "src": "6450:15:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4670,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6450:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4673,
                  "name": "_did",
                  "nodeType": "VariableDeclaration",
                  "scope": 4715,
                  "src": "6475:18:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4672,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6475:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6417:82:24"
            },
            "returnParameters": {
              "id": 4679,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6530:0:24"
            },
            "scope": 4797,
            "src": "6387:413:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4747,
              "nodeType": "Block",
              "src": "7101:168:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                          "typeString": "contract SignUpBonus"
                        },
                        "id": 4731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4727,
                          "name": "bonus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4207,
                          "src": "7119:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                            "typeString": "contract SignUpBonus"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4729,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7140:1:24",
                              "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": 4728,
                            "name": "SignUpBonus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3736,
                            "src": "7128:11:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SignUpBonus_$3736_$",
                              "typeString": "type(contract SignUpBonus)"
                            }
                          },
                          "id": 4730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7128:14:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                            "typeString": "contract SignUpBonus"
                          }
                        },
                        "src": "7119:23:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5369676e557020626f6e757320686173206e6f74206265656e2073657420796574",
                        "id": 4732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7144:35:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3e7637bc799b019a97d4ecaafb63abc7344ce6038e57d9af1c3b6087bcef7134",
                          "typeString": "literal_string \"SignUp bonus has not been set yet\""
                        },
                        "value": "SignUp bonus has not been set yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3e7637bc799b019a97d4ecaafb63abc7344ce6038e57d9af1c3b6087bcef7134",
                          "typeString": "literal_string \"SignUp bonus has not been set yet\""
                        }
                      ],
                      "id": 4726,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17348,
                        17349
                      ],
                      "referencedDeclaration": 17349,
                      "src": "7111:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7111:69:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4734,
                  "nodeType": "ExpressionStatement",
                  "src": "7111:69:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4735,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4719,
                      "src": "7194:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7204:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7194:11:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4746,
                  "nodeType": "IfStatement",
                  "src": "7190:73:24",
                  "trueBody": {
                    "id": 4745,
                    "nodeType": "Block",
                    "src": "7207:56:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4741,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4717,
                              "src": "7237:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4742,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4719,
                              "src": "7244:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4738,
                              "name": "bonus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4207,
                              "src": "7221:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SignUpBonus_$3736",
                                "typeString": "contract SignUpBonus"
                              }
                            },
                            "id": 4740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "awardUser",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3735,
                            "src": "7221:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 4743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7221:31:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4744,
                        "nodeType": "ExpressionStatement",
                        "src": "7221:31:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Function to award user with pending bonuses,\ncan only be done by admin\n@param _user The address to transfer to and whitelist\n@param _amount the bonus amount to give",
            "id": 4748,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4722,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4721,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "7078:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7078:9:24"
              },
              {
                "arguments": null,
                "id": 4724,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4723,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "7088:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7088:12:24"
              }
            ],
            "name": "awardUser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4720,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4717,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 4748,
                  "src": "7039:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4716,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7039:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4719,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4748,
                  "src": "7054:15:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4718,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7054:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7038:32:24"
            },
            "returnParameters": {
              "id": 4725,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7101:0:24"
            },
            "scope": 4797,
            "src": "7020:249:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4784,
              "nodeType": "Block",
              "src": "7847:192:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 4765,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4761,
                          "src": "7912:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4766,
                          "name": "returnValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4763,
                          "src": "7921:11:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "id": 4767,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "7911:22:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4773,
                          "name": "_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4752,
                          "src": "7965:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4771,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4754,
                            "src": "7957:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4768,
                              "name": "_contract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4750,
                              "src": "7936:9:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4769,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "7936:14:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7936:20:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
                            "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                          }
                        },
                        "id": 4772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7936:28:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 4774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7936:35:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "src": "7911:60:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4776,
                  "nodeType": "ExpressionStatement",
                  "src": "7911:60:24"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4778,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4750,
                        "src": "7998:9:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4779,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4752,
                        "src": "8009:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4780,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4754,
                        "src": "8016:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4781,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4761,
                        "src": "8024:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4777,
                      "name": "GenericCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4249,
                      "src": "7986:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,bytes memory,uint256,bool)"
                      }
                    },
                    "id": 4782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7986:46:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4783,
                  "nodeType": "EmitStatement",
                  "src": "7981:51:24"
                }
              ]
            },
            "documentation": "@dev perform a generic call to an arbitrary contract\n@param _contract  the contract's address to call\n@param _data ABI-encoded contract call to call `_contract` address.\n@param _value value (ETH) to transfer with the transaction\n@return bool    success or fail\n        bytes - the return bytes of the called contract's function.",
            "id": 4785,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4757,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4756,
                  "name": "onlyAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4306,
                  "src": "7775:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7775:9:24"
              },
              {
                "arguments": null,
                "id": 4759,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4758,
                  "name": "reimburseGas",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4330,
                  "src": "7785:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7785:12:24"
              }
            ],
            "name": "genericCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4750,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7692:17:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4749,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7692:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4752,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7719:18:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4751,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7719:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4754,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7747:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4753,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7747:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7682:85:24"
            },
            "returnParameters": {
              "id": 4764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4761,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7807:12:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4760,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7807:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4763,
                  "name": "returnValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "7821:24:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4762,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7821:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7806:40:24"
            },
            "scope": 4797,
            "src": "7662:377:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4795,
              "nodeType": "Block",
              "src": "8150:41:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4791,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17345,
                          "src": "8173:3:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8173:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 4790,
                      "name": "selfdestruct",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17353,
                      "src": "8160:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable)"
                      }
                    },
                    "id": 4793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8160:24:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4794,
                  "nodeType": "ExpressionStatement",
                  "src": "8160:24:24"
                }
              ]
            },
            "documentation": "@dev destroy wallet and return funds to owner",
            "id": 4796,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4788,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4787,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16525,
                  "src": "8140:9:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8140:9:24"
              }
            ],
            "name": "destroy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4786,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8130:2:24"
            },
            "returnParameters": {
              "id": 4789,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8150:0:24"
            },
            "scope": 4797,
            "src": "8114:77:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4798,
        "src": "375:7818:24"
      }
    ],
    "src": "0:8194:24"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.3",
  "updatedAt": "2021-01-10T16:57:18.607Z",
  "devdoc": {
    "methods": {
      "awardUser(address,uint256)": {
        "details": "Function to award user with pending bonuses, can only be done by admin",
        "params": {
          "_amount": "the bonus amount to give",
          "_user": "The address to transfer to and whitelist"
        }
      },
      "destroy()": {
        "details": "destroy wallet and return funds to owner"
      },
      "genericCall(address,bytes,uint256)": {
        "details": "perform a generic call to an arbitrary contract",
        "params": {
          "_contract": "the contract's address to call",
          "_data": "ABI-encoded contract call to call `_contract` address.",
          "_value": "value (ETH) to transfer with the transaction"
        },
        "return": "bool    success or fail        bytes - the return bytes of the called contract's function."
      },
      "isAdmin(address)": {
        "details": "Function to check if given address is an admin",
        "params": {
          "_user": "the address to check"
        },
        "return": "A bool indicating if user is an admin"
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract."
      },
      "topAdmins(uint256,uint256)": {
        "details": "top admins"
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "renounceOwnership()": {
        "notice": "Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
      }
    }
  }
}