{
  "contractName": "GoodDollar",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_cap",
          "type": "uint256"
        },
        {
          "internalType": "contract AbstractFees",
          "name": "_formula",
          "type": "address"
        },
        {
          "internalType": "contract Identity",
          "name": "_identity",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeRecipient",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "MinterAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "MinterRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addMinter",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "bridgeContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "cap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "formula",
      "outputs": [
        {
          "internalType": "contract AbstractFees",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "identity",
      "outputs": [
        {
          "internalType": "contract Identity",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isMinter",
      "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": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isPauser",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceMinter",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renouncePauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_bridgeContract",
          "type": "address"
        }
      ],
      "name": "setBridgeContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract AbstractFees",
          "name": "_formula",
          "type": "address"
        }
      ],
      "name": "setFormula",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Identity",
          "name": "_identity",
          "type": "address"
        }
      ],
      "name": "setIdentity",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "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": [],
      "name": "unpause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "transferAndCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "getFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "getFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_feeRecipient",
          "type": "address"
        }
      ],
      "name": "setFeeRecipient",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_cap\",\"type\":\"uint256\"},{\"internalType\":\"contract AbstractFees\",\"name\":\"_formula\",\"type\":\"address\"},{\"internalType\":\"contract Identity\",\"name\":\"_identity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_feeRecipient\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MinterAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MinterRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"bridgeContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"cap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"formula\",\"outputs\":[{\"internalType\":\"contract AbstractFees\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"getFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"getFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"identity\",\"outputs\":[{\"internalType\":\"contract Identity\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceMinter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridgeContract\",\"type\":\"address\"}],\"name\":\"setBridgeContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract AbstractFees\",\"name\":\"_formula\",\"type\":\"address\"}],\"name\":\"setFormula\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Identity\",\"name\":\"_identity\",\"type\":\"address\"}],\"name\":\"setIdentity\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender.\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"return\":\"A uint256 specifying the amount of tokens still available for the spender.\"},\"approve(address,uint256)\":{\"details\":\"Approve the passed address to spend the specified amount of tokens on behalf of msg.sender\",\"params\":{\"spender\":\"The address which will spend the funds\",\"value\":\"The amount of tokens to be spent\"},\"return\":\"a boolean that indicates if the operation was successful\"},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address.\",\"params\":{\"owner\":\"The address to query the balance of.\"},\"return\":\"An uint256 representing the amount owned by the passed address.\"},\"burn(uint256)\":{\"details\":\"Burns a specific amount of tokens.\",\"params\":{\"value\":\"The amount of token to be burned.\"}},\"burnFrom(address,uint256)\":{\"details\":\"Burns a specific amount of tokens from the target address and decrements allowance\",\"params\":{\"from\":\"address The address which you want to send tokens from\",\"value\":\"uint256 The amount of token to be burned\"}},\"constructor\":{\"details\":\"constructor\",\"params\":{\"_cap\":\"the cap of the token. no cap if 0\",\"_feeRecipient\":\"the address that receives transaction fees\",\"_formula\":\"the fee formula contract\",\"_identity\":\"the identity contract\",\"_name\":\"The name of the token\",\"_symbol\":\"The symbol of the token\"}},\"decreaseAllowance(address,uint256)\":{\"details\":\"Decrease the amount of tokens that an owner allowed to a spender\",\"params\":{\"spender\":\"The address which will spend the funds\",\"subtractedValue\":\"The amount of tokens to decrease the allowance by\"},\"return\":\"a boolean that indicated if the operation was successful\"},\"getFees(uint256)\":{\"details\":\"Gets the current transaction fees\",\"return\":\"an uint256 that represents the current transaction fees\"},\"getFees(uint256,address,address)\":{\"details\":\"Gets the current transaction fees\",\"return\":\"an uint256 that represents the current transaction fees\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Increase the amount of tokens that an owner allows a spender\",\"params\":{\"addedValue\":\"The amount of tokens to increase the allowance by\",\"spender\":\"The address which will spend the funds\"},\"return\":\"a boolean that indicated if the operation was successful\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"mint(address,uint256)\":{\"details\":\"Minting function\",\"params\":{\"to\":\"the address that will receive the minted tokens\",\"value\":\"the amount of tokens to mint\"},\"return\":\"a boolean that indicated if the operation was successful\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"paused()\":{\"return\":\"true if the contract is paused, false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"setFeeRecipient(address)\":{\"details\":\"Sets the address that receives the transactional fees. can only be called by owner\",\"params\":{\"_feeRecipient\":\"The new address to receive transactional fees\"}},\"totalSupply()\":{\"details\":\"Total number of tokens in existence\"},\"transfer(address,uint256)\":{\"details\":\"Processes fees from given value and sends remainder to given address\",\"params\":{\"to\":\"the address to be sent to\",\"value\":\"the value to be processed and then transferred\"},\"return\":\"a boolean that indicates if the operation was successful\"},\"transferAndCall(address,uint256,bytes)\":{\"details\":\"Processes transfer fees and calls ERC677Token transferAndCall function\",\"params\":{\"data\":\"The data to pass to transferAndCall\",\"to\":\"address to transfer to\",\"value\":\"the amount to transfer\"},\"return\":\"a bool indicating if transfer function succeeded\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfer tokens from one address to another\",\"params\":{\"from\":\"The address which you want to send tokens from\",\"to\":\"The address which you want to transfer to\",\"value\":\"the amount of tokens to be transferred\"},\"return\":\"a boolean that indicates if the operation was successful\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"}},\"title\":\"The GoodDollar ERC677 token contract\"},\"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/token/GoodDollar.sol\":\"GoodDollar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeeFormula.sol\":{\"keccak256\":\"0x2ac93f891a65aa60b93e2b27552850dfa459b88f5a19edc29bb5bab0cc4f3eaa\",\"urls\":[\"bzz-raw://bddb94bc0230d959d2362887a253a47b91f0de6804cba8e4569a7cac47c39b5a\",\"dweb:/ipfs/QmTdkPQHRdzxJ7D7pi9cowLgYY9wVja416dhBwCsdtPEv5\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FormulaHolder.sol\":{\"keccak256\":\"0xb3c0d3bc21e71497784e1be11698ff501ee11545c3106bec2cae2e8af1bacd9b\",\"urls\":[\"bzz-raw://783b4e28b67231de0fbbe48e58f43f69db3f98fd7f75668edce145a55a9b5b17\",\"dweb:/ipfs/QmdeyRfeix3PGfaXqtRQpH1sjmjFpdtuGaPwnvRn7nHAWd\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":{\"keccak256\":\"0x282184478f1d618d3523b28a84a7f7003dfdc99cad120e5e358d2cce1f5fb491\",\"urls\":[\"bzz-raw://67e17ecb57b24c4fb801abc2c52c3148af3b967e28da4fb7e074d18efb7a57c1\",\"dweb:/ipfs/QmfZ8jXhdTHtxr3gfByRj4HnXnGynX7SLZWWGR8k768aGB\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityGuard.sol\":{\"keccak256\":\"0xcc395c0e8f812201b5ed1f45e7272120ee5ffe73bfe13e325dfd872aef235b22\",\"urls\":[\"bzz-raw://58f93e4b9f48ec31ac151208e4f9e6b356cc23dfc9585d846bc09bf35d6ff7be\",\"dweb:/ipfs/QmdxJHUCaFx8N66kkDhYdA4k6d2V91yBRG6sombuPxBq7X\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677.sol\":{\"keccak256\":\"0x8360b9e356df8584d95990bb7e772342b30d9e22b160f7c875fbca5c0b87453c\",\"urls\":[\"bzz-raw://97cc6e5586cedcd49462cc465a2a8fc5063d7ec6cb9533f4e0099969a75bd4b2\",\"dweb:/ipfs/QmXw6y4iXfqyJHDRrHdd5ofQ6E4cuHDw4LiYupReJ1rCBc\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol\":{\"keccak256\":\"0xc5683b28527097379ed090b28bb46e17a50a2c57ddcb3c7e028fcd04ddc64aef\",\"urls\":[\"bzz-raw://639f6b6cf65382faea738e6326d6aeb289b8b030cf02f40c54bc45ec098eda6d\",\"dweb:/ipfs/QmQi7dFcKiwUxSbzhus4CxFTdNJvUsfiqY6i3bD4RdMQrn\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677BridgeToken.sol\":{\"keccak256\":\"0x014fa09dca773b1406855e628687be50c1eb129894f45a8b5c9fc709d826968d\",\"urls\":[\"bzz-raw://23c6491c0c26471315010687d785a3724ae33198be6ed39828d1a4f7e6873cb4\",\"dweb:/ipfs/QmW62FXHtLdNGzB8Nq9XwmwHp6Jn8jgbAVyrU2j7c7w6By\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677Token.sol\":{\"keccak256\":\"0x553a103b911d77cecb2ce3f355b2370c4a23eb070593d7c8eb46f33e3a5ff141\",\"urls\":[\"bzz-raw://e37438ce280964498b77f63bbe4d1f25c55ff4c178925447a70decceda06e46c\",\"dweb:/ipfs/QmbqCLhWjZqpFBnUVb3H7LkEbAaVmhf76Ln14oWnGimYGM\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol\":{\"keccak256\":\"0x7b91359f6912641c7dbfeced9a5c47454acce7c2cab9205d00b8049d228d7b78\",\"urls\":[\"bzz-raw://3a09bc6936d0179e2e5be2687446532d63135bc537f7ab246c6a1101d4849c1f\",\"dweb:/ipfs/QmNshqF7Xu7UX8BryKYRbnRQdTfytPappxkHq5xMxF5vpE\"]},\"@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": "0x60806040523480156200001157600080fd5b50604051620024bc380380620024bc833981810160405260c08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060408181526020830151908301516060840151608090940151600380546001600160a01b03191633179081905592965090945091849184918991899189918491849184918491849184916001600160a01b0316906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a382516200022a906004906020860190620004b9565b50815162000240906005906020850190620004b9565b50600655506200025b9050336001600160e01b036200038616565b50506008805460ff19169055506200027c336001600160e01b03620003d816565b5050506001600160a01b038116620002db576040805162461bcd60e51b815260206004820152601960248201527f537570706c696564206964656e74697479206973206e756c6c00000000000000604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392831617905581166200034b576040805162461bcd60e51b815260206004820152601860248201527f537570706c69656420666f726d756c61206973206e756c6c0000000000000000604482015290519081900360640190fd5b600c80546001600160a01b039283166001600160a01b031991821617909155600d8054939092169216919091179055506200055e9350505050565b620003a18160076200042a60201b62001d621790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b620003f38160096200042a60201b62001d621790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6001600160a01b0381166200043e57600080fd5b6200045382826001600160e01b036200048316565b156200045e57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200049957600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004fc57805160ff19168380011785556200052c565b828001600101855582156200052c579182015b828111156200052c5782518255916020019190600101906200050f565b506200053a9291506200053e565b5090565b6200055b91905b808211156200053a576000815560010162000545565b90565b611f4e806200056e6000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806370a082311161013057806398650275116100b8578063d5a06d4c1161007c578063d5a06d4c146106a7578063dd62ed3e146106c4578063e74b981b146106f2578063ecc06c7614610718578063f2fde38b1461073e57610232565b80639865027514610619578063a457c2d714610621578063a9059cbb1461064d578063aa271e1a14610679578063cd5965831461069f57610232565b80638456cb59116100ff5780638456cb59146105d35780638da5cb5b146105db5780638f32d59b146105e357806395d89b41146105eb578063983b2d56146105f357610232565b806370a0823114610553578063715018a61461057957806379cc67901461058157806382dc1ec4146105ad57610232565b806339509351116101be57806346fbf68e1161018257806346fbf68e146104ef5780634b75f54f146105155780635c975abb1461051d5780635d5bf178146105255780636ef8d66d1461054b57610232565b806339509351146103ed5780633f4ba83a146104195780634000aea01461042157806340c10f19146104a657806342966c68146104d257610232565b806323b872dd1161020557806323b872dd146103365780632c159a1a1461036c578063313ce56714610390578063355274ea1461039857806339364fd7146103a057610232565b806306fdde0314610237578063095ea7b3146102b45780630b26cf66146102f457806318160ddd1461031c575b600080fd5b61023f610764565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b0381351690602001356107f2565b604080519115158252519081900360200190f35b61031a6004803603602081101561030a57600080fd5b50356001600160a01b0316610805565b005b6103246108a6565b60408051918252519081900360200190f35b6102e06004803603606081101561034c57600080fd5b506001600160a01b038135811691602081013590911690604001356108ac565b6103746108d0565b604080516001600160a01b039092168252519081900360200190f35b6103246108df565b6103246108e4565b6103d4600480360360608110156103b657600080fd5b508035906001600160a01b03602082013581169160400135166108ea565b6040805192835290151560208301528051918290030190f35b6102e06004803603604081101561040357600080fd5b506001600160a01b038135169060200135610985565b61031a610991565b6102e06004803603606081101561043757600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561046757600080fd5b82018360208201111561047957600080fd5b8035906020019184600183028401116401000000008311171561049b57600080fd5b5090925090506109f1565b6102e0600480360360408110156104bc57600080fd5b506001600160a01b038135169060200135610a4c565b61031a600480360360208110156104e857600080fd5b5035610b9c565b6102e06004803603602081101561050557600080fd5b50356001600160a01b0316610c69565b610374610c82565b6102e0610c91565b61031a6004803603602081101561053b57600080fd5b50356001600160a01b0316610c9a565b61031a610d83565b6103246004803603602081101561056957600080fd5b50356001600160a01b0316610d8e565b61031a610da9565b61031a6004803603604081101561059757600080fd5b506001600160a01b038135169060200135610e04565b61031a600480360360208110156105c357600080fd5b50356001600160a01b0316610f9c565b61031a610fb7565b61037461101b565b6102e061102a565b61023f61103b565b61031a6004803603602081101561060957600080fd5b50356001600160a01b0316611096565b61031a6110b1565b6102e06004803603604081101561063757600080fd5b506001600160a01b0381351690602001356110ba565b6102e06004803603604081101561066357600080fd5b506001600160a01b0381351690602001356110c6565b6102e06004803603602081101561068f57600080fd5b50356001600160a01b03166110e8565b6103746110fb565b6103d4600480360360208110156106bd57600080fd5b503561110a565b610324600480360360408110156106da57600080fd5b506001600160a01b03813581169160200135166111a2565b61031a6004803603602081101561070857600080fd5b50356001600160a01b03166111cd565b61031a6004803603602081101561072e57600080fd5b50356001600160a01b0316611200565b61031a6004803603602081101561075457600080fd5b50356001600160a01b0316611298565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107ea5780601f106107bf576101008083540402835291602001916107ea565b820191906000526020600020905b8154815290600101906020018083116107cd57829003601f168201915b505050505081565b60006107fe83836112b2565b9392505050565b61080e336110e8565b61081757600080fd5b6001600160a01b038116158015906108335750610833816112cf565b610884576040805162461bcd60e51b815260206004820152601760248201527f496e76616c69642062726964676520636f6e7472616374000000000000000000604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60025490565b6000806108ba8585856112d5565b90506108c785858361145d565b95945050505050565b600b546001600160a01b031681565b600281565b60065481565b600c5460408051631eed540360e11b8152600481018690526001600160a01b038581166024830152848116604483015282516000948594921692633ddaa806926064808301939192829003018186803b15801561094657600080fd5b505afa15801561095a573d6000803e3d6000fd5b505050506040513d604081101561097057600080fd5b50805160209091015190969095509350505050565b60006107fe838361147b565b61099a33610c69565b6109a357600080fd5b60085460ff166109b257600080fd5b6008805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000806109ff3387876112d5565b9050610a42868286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061149892505050565b9695505050505050565b6000610a57336110e8565b610a6057600080fd5b600b546040805163fe575a8760e01b81526001600160a01b03808716600483015291518693929092169163fe575a8791602480820192602092909190829003018186803b158015610ab057600080fd5b505afa158015610ac4573d6000803e3d6000fd5b505050506040513d6020811015610ada57600080fd5b505115610b28576040805162461bcd60e51b8152602060048201526017602482015276149958d95a5d995c881a5cc8189b1858dadb1a5cdd1959604a1b604482015290519081900360640190fd5b60065415610b8857600654610b4b84610b3f6108a6565b9063ffffffff6115d816565b1115610b885760405162461bcd60e51b8152600401808060200182810382526021815260200180611ed96021913960400191505060405180910390fd5b610b9284846115ea565b5060019392505050565b600b546040805163fe575a8760e01b815233600482015290516001600160a01b039092169163fe575a8791602480820192602092909190829003018186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d6020811015610c1157600080fd5b505115610c5d576040805162461bcd60e51b815260206004820152601560248201527410d85b1b195c881a5cc8189b1858dadb1a5cdd1959605a1b604482015290519081900360640190fd5b610c6681611692565b50565b6000610c7c60078363ffffffff61169c16565b92915050565b600c546001600160a01b031681565b60085460ff1690565b610ca261102a565b610cab57600080fd5b806001600160a01b031663223668446040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce457600080fd5b505afa158015610cf8573d6000803e3d6000fd5b505050506040513d6020811015610d0e57600080fd5b5051610d61576040805162461bcd60e51b815260206004820152601a60248201527f4964656e74697479206973206e6f742072656769737465726564000000000000604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b610d8c336116d1565b565b6001600160a01b031660009081526020819052604090205490565b610db161102a565b610dba57600080fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b600b546040805163fe575a8760e01b815233600482015290516001600160a01b039092169163fe575a8791602480820192602092909190829003018186803b158015610e4f57600080fd5b505afa158015610e63573d6000803e3d6000fd5b505050506040513d6020811015610e7957600080fd5b505115610ec5576040805162461bcd60e51b815260206004820152601560248201527410d85b1b195c881a5cc8189b1858dadb1a5cdd1959605a1b604482015290519081900360640190fd5b600b546040805163fe575a8760e01b81526001600160a01b03808616600483015291518593929092169163fe575a8791602480820192602092909190829003018186803b158015610f1557600080fd5b505afa158015610f29573d6000803e3d6000fd5b505050506040513d6020811015610f3f57600080fd5b505115610f8d576040805162461bcd60e51b8152602060048201526017602482015276149958d95a5d995c881a5cc8189b1858dadb1a5cdd1959604a1b604482015290519081900360640190fd5b610f978383611719565b505050565b610fa533610c69565b610fae57600080fd5b610c6681611727565b610fc033610c69565b610fc957600080fd5b60085460ff1615610fd957600080fd5b6008805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6003546001600160a01b031690565b6003546001600160a01b0316331490565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107ea5780601f106107bf576101008083540402835291602001916107ea565b61109f336110e8565b6110a857600080fd5b610c668161176f565b610d8c336117b7565b60006107fe83836117ff565b6000806110d43385856112d5565b90506110e0848261181c565b949350505050565b6000610c7c60098363ffffffff61169c16565b600a546001600160a01b031681565b600c5460408051631eed540360e11b815260048101849052600060248201819052604482018190528251909384936001600160a01b0390911692633ddaa8069260648083019392829003018186803b15801561116557600080fd5b505afa158015611179573d6000803e3d6000fd5b505050506040513d604081101561118f57600080fd5b5080516020909101519092509050915091565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6111d561102a565b6111de57600080fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b61120861102a565b61121157600080fd5b806001600160a01b031663223668446040518163ffffffff1660e01b815260040160206040518083038186803b15801561124a57600080fd5b505afa15801561125e573d6000803e3d6000fd5b505050506040513d602081101561127457600080fd5b5050600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6112a061102a565b6112a957600080fd5b610c6681611839565b60085460009060ff16156112c557600080fd5b6107fe83836118a8565b3b151590565b60008060006112e58487876108ea565b9150915060008211801561136d5750600b546040805163639e625760e11b815233600482015290516001600160a01b039092169163c73cc4ae91602480820192602092909190829003018186803b15801561133f57600080fd5b505afa158015611353573d6000803e3d6000fd5b505050506040513d602081101561136957600080fd5b5051155b1561145357801580611396575061138386610d8e565b611393858463ffffffff6115d816565b11155b6113e7576040805162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f7567682062616c616e636520746f2070617920545820666565604482015290519081900360640190fd5b6001600160a01b03861633141561141457600d5461140e906001600160a01b03168361181c565b5061142e565b600d5461142c9087906001600160a01b03168461145d565b505b8061144857611443848363ffffffff61191216565b61144a565b835b925050506107fe565b5091949350505050565b60085460009060ff161561147057600080fd5b6110e0848484611927565b60085460009060ff161561148e57600080fd5b6107fe83836119de565b60085460009060ff16156114ab57600080fd5b60006114b7858561181c565b9050846001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1686866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561153357818101518382015260200161151b565b50505050905090810190601f1680156115605780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3611577856112cf565b156110e057611587858585611a7a565b6110e0576040805162461bcd60e51b815260206004820152601860248201527f436f6e74726163742066616c6c6261636b206661696c65640000000000000000604482015290519081900360640190fd5b6000828201838110156107fe57600080fd5b6001600160a01b0382166115fd57600080fd5b600254611610908263ffffffff6115d816565b6002556001600160a01b03821660009081526020819052604090205461163c908263ffffffff6115d816565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b610c663382611bc3565b60006001600160a01b0382166116b157600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6116e260078263ffffffff611c6a16565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b6117238282611cb2565b5050565b61173860078263ffffffff611d6216565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b61178060098263ffffffff611d6216565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6117c860098263ffffffff611c6a16565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60085460009060ff161561181257600080fd5b6107fe8383611dae565b60085460009060ff161561182f57600080fd5b6107fe8383611df7565b6001600160a01b03811661184c57600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0383166118bd57600080fd5b3360008181526001602090815260408083206001600160a01b0388168085529083529281902086905580518681529051929392600080516020611efa833981519152929181900390910190a350600192915050565b60008282111561192157600080fd5b50900390565b6001600160a01b038316600090815260016020908152604080832033845290915281205461195b908363ffffffff61191216565b6001600160a01b038516600090815260016020908152604080832033845290915290205561198a848484611e0d565b6001600160a01b038416600081815260016020908152604080832033808552908352928190205481519081529051929392600080516020611efa833981519152929181900390910190a35060019392505050565b60006001600160a01b0383166119f357600080fd5b3360009081526001602090815260408083206001600160a01b0387168452909152902054611a27908363ffffffff6115d816565b3360008181526001602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020611efa833981519152929081900390910190a350600192915050565b604051635260769b60e11b815233600482018181526024830185905260606044840190815284516064850152845160009488946001600160a01b0386169463a4c0ed369491938a938a939160849091019060208501908083838e5b83811015611aed578181015183820152602001611ad5565b50505050905090810190601f168015611b1a5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015611b3b57600080fd5b505af1158015611b4f573d6000803e3d6000fd5b505050506040513d6020811015611b6557600080fd5b5051611bb8576040805162461bcd60e51b815260206004820152601860248201527f436f6e74726163742046616c6c6261636b206661696c65640000000000000000604482015290519081900360640190fd5b506001949350505050565b6001600160a01b038216611bd657600080fd5b600254611be9908263ffffffff61191216565b6002556001600160a01b038216600090815260208190526040902054611c15908263ffffffff61191216565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b6001600160a01b038116611c7d57600080fd5b611c87828261169c565b611c9057600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0382166000908152600160209081526040808320338452909152902054611ce6908263ffffffff61191216565b6001600160a01b0383166000908152600160209081526040808320338452909152902055611d148282611bc3565b6001600160a01b038216600081815260016020908152604080832033808552908352928190205481519081529051929392600080516020611efa833981519152929181900390910190a35050565b6001600160a01b038116611d7557600080fd5b611d7f828261169c565b15611d8957600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038316611dc357600080fd5b3360009081526001602090815260408083206001600160a01b0387168452909152902054611a27908363ffffffff61191216565b6000611e04338484611e0d565b50600192915050565b6001600160a01b038216611e2057600080fd5b6001600160a01b038316600090815260208190526040902054611e49908263ffffffff61191216565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e7e908263ffffffff6115d816565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505056fe43616e6e6f7420696e63726561736520737570706c79206265796f6e64206361708c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a265627a7a72315820377577b98803c2210dfa17f6feaf68d6a856726073543a35d4a8526c1f78cc9f64736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c806370a082311161013057806398650275116100b8578063d5a06d4c1161007c578063d5a06d4c146106a7578063dd62ed3e146106c4578063e74b981b146106f2578063ecc06c7614610718578063f2fde38b1461073e57610232565b80639865027514610619578063a457c2d714610621578063a9059cbb1461064d578063aa271e1a14610679578063cd5965831461069f57610232565b80638456cb59116100ff5780638456cb59146105d35780638da5cb5b146105db5780638f32d59b146105e357806395d89b41146105eb578063983b2d56146105f357610232565b806370a0823114610553578063715018a61461057957806379cc67901461058157806382dc1ec4146105ad57610232565b806339509351116101be57806346fbf68e1161018257806346fbf68e146104ef5780634b75f54f146105155780635c975abb1461051d5780635d5bf178146105255780636ef8d66d1461054b57610232565b806339509351146103ed5780633f4ba83a146104195780634000aea01461042157806340c10f19146104a657806342966c68146104d257610232565b806323b872dd1161020557806323b872dd146103365780632c159a1a1461036c578063313ce56714610390578063355274ea1461039857806339364fd7146103a057610232565b806306fdde0314610237578063095ea7b3146102b45780630b26cf66146102f457806318160ddd1461031c575b600080fd5b61023f610764565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b0381351690602001356107f2565b604080519115158252519081900360200190f35b61031a6004803603602081101561030a57600080fd5b50356001600160a01b0316610805565b005b6103246108a6565b60408051918252519081900360200190f35b6102e06004803603606081101561034c57600080fd5b506001600160a01b038135811691602081013590911690604001356108ac565b6103746108d0565b604080516001600160a01b039092168252519081900360200190f35b6103246108df565b6103246108e4565b6103d4600480360360608110156103b657600080fd5b508035906001600160a01b03602082013581169160400135166108ea565b6040805192835290151560208301528051918290030190f35b6102e06004803603604081101561040357600080fd5b506001600160a01b038135169060200135610985565b61031a610991565b6102e06004803603606081101561043757600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561046757600080fd5b82018360208201111561047957600080fd5b8035906020019184600183028401116401000000008311171561049b57600080fd5b5090925090506109f1565b6102e0600480360360408110156104bc57600080fd5b506001600160a01b038135169060200135610a4c565b61031a600480360360208110156104e857600080fd5b5035610b9c565b6102e06004803603602081101561050557600080fd5b50356001600160a01b0316610c69565b610374610c82565b6102e0610c91565b61031a6004803603602081101561053b57600080fd5b50356001600160a01b0316610c9a565b61031a610d83565b6103246004803603602081101561056957600080fd5b50356001600160a01b0316610d8e565b61031a610da9565b61031a6004803603604081101561059757600080fd5b506001600160a01b038135169060200135610e04565b61031a600480360360208110156105c357600080fd5b50356001600160a01b0316610f9c565b61031a610fb7565b61037461101b565b6102e061102a565b61023f61103b565b61031a6004803603602081101561060957600080fd5b50356001600160a01b0316611096565b61031a6110b1565b6102e06004803603604081101561063757600080fd5b506001600160a01b0381351690602001356110ba565b6102e06004803603604081101561066357600080fd5b506001600160a01b0381351690602001356110c6565b6102e06004803603602081101561068f57600080fd5b50356001600160a01b03166110e8565b6103746110fb565b6103d4600480360360208110156106bd57600080fd5b503561110a565b610324600480360360408110156106da57600080fd5b506001600160a01b03813581169160200135166111a2565b61031a6004803603602081101561070857600080fd5b50356001600160a01b03166111cd565b61031a6004803603602081101561072e57600080fd5b50356001600160a01b0316611200565b61031a6004803603602081101561075457600080fd5b50356001600160a01b0316611298565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107ea5780601f106107bf576101008083540402835291602001916107ea565b820191906000526020600020905b8154815290600101906020018083116107cd57829003601f168201915b505050505081565b60006107fe83836112b2565b9392505050565b61080e336110e8565b61081757600080fd5b6001600160a01b038116158015906108335750610833816112cf565b610884576040805162461bcd60e51b815260206004820152601760248201527f496e76616c69642062726964676520636f6e7472616374000000000000000000604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60025490565b6000806108ba8585856112d5565b90506108c785858361145d565b95945050505050565b600b546001600160a01b031681565b600281565b60065481565b600c5460408051631eed540360e11b8152600481018690526001600160a01b038581166024830152848116604483015282516000948594921692633ddaa806926064808301939192829003018186803b15801561094657600080fd5b505afa15801561095a573d6000803e3d6000fd5b505050506040513d604081101561097057600080fd5b50805160209091015190969095509350505050565b60006107fe838361147b565b61099a33610c69565b6109a357600080fd5b60085460ff166109b257600080fd5b6008805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000806109ff3387876112d5565b9050610a42868286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061149892505050565b9695505050505050565b6000610a57336110e8565b610a6057600080fd5b600b546040805163fe575a8760e01b81526001600160a01b03808716600483015291518693929092169163fe575a8791602480820192602092909190829003018186803b158015610ab057600080fd5b505afa158015610ac4573d6000803e3d6000fd5b505050506040513d6020811015610ada57600080fd5b505115610b28576040805162461bcd60e51b8152602060048201526017602482015276149958d95a5d995c881a5cc8189b1858dadb1a5cdd1959604a1b604482015290519081900360640190fd5b60065415610b8857600654610b4b84610b3f6108a6565b9063ffffffff6115d816565b1115610b885760405162461bcd60e51b8152600401808060200182810382526021815260200180611ed96021913960400191505060405180910390fd5b610b9284846115ea565b5060019392505050565b600b546040805163fe575a8760e01b815233600482015290516001600160a01b039092169163fe575a8791602480820192602092909190829003018186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d6020811015610c1157600080fd5b505115610c5d576040805162461bcd60e51b815260206004820152601560248201527410d85b1b195c881a5cc8189b1858dadb1a5cdd1959605a1b604482015290519081900360640190fd5b610c6681611692565b50565b6000610c7c60078363ffffffff61169c16565b92915050565b600c546001600160a01b031681565b60085460ff1690565b610ca261102a565b610cab57600080fd5b806001600160a01b031663223668446040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce457600080fd5b505afa158015610cf8573d6000803e3d6000fd5b505050506040513d6020811015610d0e57600080fd5b5051610d61576040805162461bcd60e51b815260206004820152601a60248201527f4964656e74697479206973206e6f742072656769737465726564000000000000604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b610d8c336116d1565b565b6001600160a01b031660009081526020819052604090205490565b610db161102a565b610dba57600080fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b600b546040805163fe575a8760e01b815233600482015290516001600160a01b039092169163fe575a8791602480820192602092909190829003018186803b158015610e4f57600080fd5b505afa158015610e63573d6000803e3d6000fd5b505050506040513d6020811015610e7957600080fd5b505115610ec5576040805162461bcd60e51b815260206004820152601560248201527410d85b1b195c881a5cc8189b1858dadb1a5cdd1959605a1b604482015290519081900360640190fd5b600b546040805163fe575a8760e01b81526001600160a01b03808616600483015291518593929092169163fe575a8791602480820192602092909190829003018186803b158015610f1557600080fd5b505afa158015610f29573d6000803e3d6000fd5b505050506040513d6020811015610f3f57600080fd5b505115610f8d576040805162461bcd60e51b8152602060048201526017602482015276149958d95a5d995c881a5cc8189b1858dadb1a5cdd1959604a1b604482015290519081900360640190fd5b610f978383611719565b505050565b610fa533610c69565b610fae57600080fd5b610c6681611727565b610fc033610c69565b610fc957600080fd5b60085460ff1615610fd957600080fd5b6008805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6003546001600160a01b031690565b6003546001600160a01b0316331490565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107ea5780601f106107bf576101008083540402835291602001916107ea565b61109f336110e8565b6110a857600080fd5b610c668161176f565b610d8c336117b7565b60006107fe83836117ff565b6000806110d43385856112d5565b90506110e0848261181c565b949350505050565b6000610c7c60098363ffffffff61169c16565b600a546001600160a01b031681565b600c5460408051631eed540360e11b815260048101849052600060248201819052604482018190528251909384936001600160a01b0390911692633ddaa8069260648083019392829003018186803b15801561116557600080fd5b505afa158015611179573d6000803e3d6000fd5b505050506040513d604081101561118f57600080fd5b5080516020909101519092509050915091565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6111d561102a565b6111de57600080fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b61120861102a565b61121157600080fd5b806001600160a01b031663223668446040518163ffffffff1660e01b815260040160206040518083038186803b15801561124a57600080fd5b505afa15801561125e573d6000803e3d6000fd5b505050506040513d602081101561127457600080fd5b5050600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6112a061102a565b6112a957600080fd5b610c6681611839565b60085460009060ff16156112c557600080fd5b6107fe83836118a8565b3b151590565b60008060006112e58487876108ea565b9150915060008211801561136d5750600b546040805163639e625760e11b815233600482015290516001600160a01b039092169163c73cc4ae91602480820192602092909190829003018186803b15801561133f57600080fd5b505afa158015611353573d6000803e3d6000fd5b505050506040513d602081101561136957600080fd5b5051155b1561145357801580611396575061138386610d8e565b611393858463ffffffff6115d816565b11155b6113e7576040805162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f7567682062616c616e636520746f2070617920545820666565604482015290519081900360640190fd5b6001600160a01b03861633141561141457600d5461140e906001600160a01b03168361181c565b5061142e565b600d5461142c9087906001600160a01b03168461145d565b505b8061144857611443848363ffffffff61191216565b61144a565b835b925050506107fe565b5091949350505050565b60085460009060ff161561147057600080fd5b6110e0848484611927565b60085460009060ff161561148e57600080fd5b6107fe83836119de565b60085460009060ff16156114ab57600080fd5b60006114b7858561181c565b9050846001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1686866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561153357818101518382015260200161151b565b50505050905090810190601f1680156115605780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3611577856112cf565b156110e057611587858585611a7a565b6110e0576040805162461bcd60e51b815260206004820152601860248201527f436f6e74726163742066616c6c6261636b206661696c65640000000000000000604482015290519081900360640190fd5b6000828201838110156107fe57600080fd5b6001600160a01b0382166115fd57600080fd5b600254611610908263ffffffff6115d816565b6002556001600160a01b03821660009081526020819052604090205461163c908263ffffffff6115d816565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b610c663382611bc3565b60006001600160a01b0382166116b157600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6116e260078263ffffffff611c6a16565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b6117238282611cb2565b5050565b61173860078263ffffffff611d6216565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b61178060098263ffffffff611d6216565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6117c860098263ffffffff611c6a16565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60085460009060ff161561181257600080fd5b6107fe8383611dae565b60085460009060ff161561182f57600080fd5b6107fe8383611df7565b6001600160a01b03811661184c57600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0383166118bd57600080fd5b3360008181526001602090815260408083206001600160a01b0388168085529083529281902086905580518681529051929392600080516020611efa833981519152929181900390910190a350600192915050565b60008282111561192157600080fd5b50900390565b6001600160a01b038316600090815260016020908152604080832033845290915281205461195b908363ffffffff61191216565b6001600160a01b038516600090815260016020908152604080832033845290915290205561198a848484611e0d565b6001600160a01b038416600081815260016020908152604080832033808552908352928190205481519081529051929392600080516020611efa833981519152929181900390910190a35060019392505050565b60006001600160a01b0383166119f357600080fd5b3360009081526001602090815260408083206001600160a01b0387168452909152902054611a27908363ffffffff6115d816565b3360008181526001602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020611efa833981519152929081900390910190a350600192915050565b604051635260769b60e11b815233600482018181526024830185905260606044840190815284516064850152845160009488946001600160a01b0386169463a4c0ed369491938a938a939160849091019060208501908083838e5b83811015611aed578181015183820152602001611ad5565b50505050905090810190601f168015611b1a5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015611b3b57600080fd5b505af1158015611b4f573d6000803e3d6000fd5b505050506040513d6020811015611b6557600080fd5b5051611bb8576040805162461bcd60e51b815260206004820152601860248201527f436f6e74726163742046616c6c6261636b206661696c65640000000000000000604482015290519081900360640190fd5b506001949350505050565b6001600160a01b038216611bd657600080fd5b600254611be9908263ffffffff61191216565b6002556001600160a01b038216600090815260208190526040902054611c15908263ffffffff61191216565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b6001600160a01b038116611c7d57600080fd5b611c87828261169c565b611c9057600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0382166000908152600160209081526040808320338452909152902054611ce6908263ffffffff61191216565b6001600160a01b0383166000908152600160209081526040808320338452909152902055611d148282611bc3565b6001600160a01b038216600081815260016020908152604080832033808552908352928190205481519081529051929392600080516020611efa833981519152929181900390910190a35050565b6001600160a01b038116611d7557600080fd5b611d7f828261169c565b15611d8957600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038316611dc357600080fd5b3360009081526001602090815260408083206001600160a01b0387168452909152902054611a27908363ffffffff61191216565b6000611e04338484611e0d565b50600192915050565b6001600160a01b038216611e2057600080fd5b6001600160a01b038316600090815260208190526040902054611e49908263ffffffff61191216565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e7e908263ffffffff6115d816565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505056fe43616e6e6f7420696e63726561736520737570706c79206265796f6e64206361708c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a265627a7a72315820377577b98803c2210dfa17f6feaf68d6a856726073543a35d4a8526c1f78cc9f64736f6c63430005100032",
  "sourceMap": "198:7122:44:-;;;739:367;8:9:-1;5:2;;;30:1;27;20:12;5:2;739:367:44;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;739:367:44;;;;;;;;;;;;;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;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;739:367:44;;420:4:-1;411:14;;;;739:367:44;;;;;411:14:-1;739:367:44;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;739:367:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;739:367:44;;420:4:-1;411:14;;;;739:367:44;;;;;411:14:-1;739:367:44;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;739:367:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;739:367:44;;;;;;;;;;;;;;;;;;;;;515:6:72;:19;;-1:-1:-1;;;;;;515:19:72;524:10;515:19;;;;;739:367:44;;-1:-1:-1;739:367:44;;-1:-1:-1;739:367:44;;;;;970:5;;977:7;;739:367;;970:5;;977:7;;739:367;;970:5;;977:7;;739:367;;-1:-1:-1;;;;;582:6:72;;-1:-1:-1;;549:40:72;;-1:-1:-1;;549:40:72;828:12:49;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;850:16:49;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;876:3:49;:10;-1:-1:-1;275:22:67;;-1:-1:-1;286:10:67;275;:22::i;:::-;-1:-1:-1;;352:7:69;:15;;-1:-1:-1;;352:15:69;;;-1:-1:-1;275:22:66;286:10;275;:22::i;:::-;-1:-1:-1;;;;;;;;483:24:28;;475:62;;;;;-1:-1:-1;;;475:62:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;547:8;:20;;-1:-1:-1;;;;;;547:20:28;-1:-1:-1;;;;;547:20:28;;;;;;469:27:14;;461:64;;;;;-1:-1:-1;;;461:64:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;535:7;:18;;-1:-1:-1;;;;;535:18:14;;;-1:-1:-1;;;;;;535:18:14;;;;;;;1071:12:44;:28;;;;;;;;;;;;;;-1:-1:-1;198:7122:44;;-1:-1:-1;;;;198:7122:44;685:119:67;741:21;754:7;741:8;:12;;;;;;:21;;;;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:67;;;;;;;;685:119;:::o;::66:-;741:21;754:7;741:8;:12;;;;;;:21;;;;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:66;;;;;;;;685:119;:::o;259:181:65:-;-1:-1:-1;;;;;335:21:65;;327:30;;;;;;376:18;380:4;386:7;376:3;:18::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:65;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:65;-1:-1:-1;406:27:65;;;259:181::o;786:162::-;858:4;-1:-1:-1;;;;;882:21:65;;874:30;;;;;;-1:-1:-1;;;;;;921:20:65;:11;:20;;;;;;;;;;;;;;;786:162::o;198:7122:44:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;198:7122:44;;;-1:-1:-1;198:7122:44;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "198:7122:44:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;198:7122:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;408:18:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;408:18:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:124:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1911:124:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;370:259:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;370:259:42;-1:-1:-1;;;;;370:259:42;;:::i;:::-;;936:89:73;;;:::i;:::-;;;;;;;;;;;;;;;;2369:240:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2369:240:44;;;;;;;;;;;;;;;;;:::i;278:24:28:-;;;:::i;:::-;;;;-1:-1:-1;;;;;278:24:28;;;;;;;;;;;;;;350:36:44;;;:::i;553:18:49:-;;;:::i;5777:200:44:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5777:200:44;;;-1:-1:-1;;;;;5777:200:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4675:174;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4675:174:44;;;;;;;;:::i;1176:115:69:-;;;:::i;2916:262:44:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;2916:262:44;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;2916:262:44;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2916:262:44;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;2916:262:44;;-1:-1:-1;2916:262:44;-1:-1:-1;2916:262:44;:::i;3415:320::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3415:320:44;;;;;;;;:::i;3858:89::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3858:89:44;;:::i;395:107:67:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;395:107:67;-1:-1:-1;;;;;395:107:67;;:::i;244:27:14:-;;;:::i;460:76:69:-;;;:::i;2735:168:28:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2735:168:28;-1:-1:-1;;;;;2735:168:28;;:::i;604:75:67:-;;;:::i;1234:104:73:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1234:104:73;-1:-1:-1;;;;;1234:104:73;;:::i;1347:137:72:-;;;:::i;4199:173:44:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4199:173:44;;;;;;;;:::i;508:90:67:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;508:90:67;-1:-1:-1;;;;;508:90:67;;:::i;973:113:69:-;;;:::i;659:77:72:-;;;:::i;979:90::-;;;:::i;432:20:49:-;;;:::i;508:90:66:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;508:90:66;-1:-1:-1;;;;;508:90:66;;:::i;604:75::-;;;:::i;5161:184:44:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5161:184:44;;;;;;;;:::i;1405:188::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1405:188:44;;;;;;;;:::i;395:107:66:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;395:107:66;-1:-1:-1;;;;;395:107:66;;:::i;185:29:42:-;;;:::i;5491:140:44:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5491:140:44;;:::i;1669:129:73:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1669:129:73;;;;;;;;;;:::i;6175:110:44:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6175:110:44;-1:-1:-1;;;;;6175:110:44;;:::i;758:128:14:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;758:128:14;-1:-1:-1;;;;;758:128:14;;:::i;1655:107:72:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:72;-1:-1:-1;;;;;1655:107:72;;:::i;408:18:49:-;;;;;;;;;;;;;;;-1:-1:-1;;408:18:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1911:124:44:-;1976:4;1999:29;2013:7;2022:5;1999:13;:29::i;:::-;1992:36;1911:124;-1:-1:-1;;;1911:124:44:o;370:259:42:-;350:20:66;359:10;350:8;:20::i;:::-;342:29;;;;;;-1:-1:-1;;;;;471:29:42;;;;;;:60;;;504:27;515:15;504:10;:27::i;:::-;450:130;;;;;-1:-1:-1;;;450:130:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;590:14;:32;;-1:-1:-1;;;;;;590:32:42;-1:-1:-1;;;;;590:32:42;;;;;;;;;;370:259::o;936:89:73:-;1006:12;;936:89;:::o;2369:240:44:-;2478:4;2494:19;2516:28;2528:4;2534:2;2538:5;2516:11;:28::i;:::-;2494:50;;2561:41;2580:4;2586:2;2590:11;2561:18;:41::i;:::-;2554:48;2369:240;-1:-1:-1;;;;;2369:240:44:o;278:24:28:-;;;-1:-1:-1;;;;;278:24:28;;:::o;350:36:44:-;385:1;350:36;:::o;553:18:49:-;;;;:::o;5777:200:44:-;5927:7;;:43;;;-1:-1:-1;;;5927:43:44;;;;;;;;-1:-1:-1;;;;;5927:43:44;;;;;;;;;;;;;;;;-1:-1:-1;;;;5927:7:44;;;:17;;:43;;;;;;;;;;;;:7;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;5927:43:44;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5927:43:44;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5927:43:44;;;;;;;;;;;-1:-1:-1;5777:200:44;-1:-1:-1;;;;5777:200:44:o;4675:174::-;4771:4;4798:44;4822:7;4831:10;4798:23;:44::i;1176:115:69:-;350:20:67;359:10;350:8;:20::i;:::-;342:29;;;;;;860:7:69;;;;852:16;;;;;;1234:7;:15;;-1:-1:-1;;1234:15:69;;;1264:20;;;1273:10;1264:20;;;;;;;;;;;;;1176:115::o;2916:262:44:-;3037:4;3053:19;3075:34;3087:10;3099:2;3103:5;3075:11;:34::i;:::-;3053:56;;3126:45;3149:2;3153:11;3166:4;;3126:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3126:22:44;;-1:-1:-1;;;3126:45:44:i;:::-;3119:52;2916:262;-1:-1:-1;;;;;;2916:262:44:o;3415:320::-;3541:4;350:20:66;359:10;350:8;:20::i;:::-;342:29;;;;;;989:8:28;;:32;;;-1:-1:-1;;;989:32:28;;-1:-1:-1;;;;;989:32:28;;;;;;;;;;;:8;;;;;-1:-1:-1;;989:32:28;;;;;;;;;;;;;;;:8;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;989:32:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;989:32:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;989:32:28;988:33;980:69;;;;;-1:-1:-1;;;980:69:28;;;;;;;;;;;;-1:-1:-1;;;980:69:28;;;;;;;;;;;;;;;3565:3:44;;:7;3561:115;;3624:3;;3596:24;3614:5;3596:13;:11;:13::i;:::-;:17;:24;:17;:24;:::i;:::-;:31;;3588:77;;;;-1:-1:-1;;;3588:77:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3685:22;3697:2;3701:5;3685:11;:22::i;:::-;-1:-1:-1;3724:4:44;;3415:320;-1:-1:-1;;;3415:320:44:o;3858:89::-;705:8:28;;:34;;;-1:-1:-1;;;705:34:28;;728:10;705:34;;;;;;-1:-1:-1;;;;;705:8:28;;;;-1:-1:-1;;705:34:28;;;;;;;;;;;;;;;:8;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;705:34:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;705:34:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;705:34:28;704:35;696:69;;;;;-1:-1:-1;;;696:69:28;;;;;;;;;;;;-1:-1:-1;;;696:69:28;;;;;;;;;;;;;;;3923:17:44;3934:5;3923:10;:17::i;:::-;3858:89;:::o;395:107:67:-;451:4;474:21;:8;487:7;474:21;:12;:21;:::i;:::-;467:28;395:107;-1:-1:-1;;395:107:67:o;244:27:14:-;;;-1:-1:-1;;;;;244:27:14;;:::o;460:76:69:-;522:7;;;;460:76;:::o;2735:168:28:-;863:9:72;:7;:9::i;:::-;855:18;;;;;;2811:9:28;-1:-1:-1;;;;;2811:22:28;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2811:24:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2811:24:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2811:24:28;2803:63;;;;;-1:-1:-1;;;2803:63:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;2876:8;:20;;-1:-1:-1;;;;;;2876:20:28;-1:-1:-1;;;;;2876:20:28;;;;;;;;;;2735:168::o;604:75:67:-;647:25;661:10;647:13;:25::i;:::-;604:75::o;1234:104:73:-;-1:-1:-1;;;;;1315:16:73;1289:7;1315:16;;;;;;;;;;;;1234:104::o;1347:137:72:-;863:9;:7;:9::i;:::-;855:18;;;;;;1429:6;;1408:40;;1445:1;;-1:-1:-1;;;;;1429:6:72;;1408:40;;1445:1;;1408:40;1458:6;:19;;-1:-1:-1;;;;;;1458:19:72;;;1347:137::o;4199:173:44:-;705:8:28;;:34;;;-1:-1:-1;;;705:34:28;;728:10;705:34;;;;;;-1:-1:-1;;;;;705:8:28;;;;-1:-1:-1;;705:34:28;;;;;;;;;;;;;;;:8;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;705:34:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;705:34:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;705:34:28;704:35;696:69;;;;;-1:-1:-1;;;696:69:28;;;;;;;;;;;;-1:-1:-1;;;696:69:28;;;;;;;;;;;;;;;989:8;;:32;;;-1:-1:-1;;;989:32:28;;-1:-1:-1;;;;;989:32:28;;;;;;;;;;;:8;;;;;-1:-1:-1;;989:32:28;;;;;;;;;;;;;;;:8;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;989:32:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;989:32:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;989:32:28;988:33;980:69;;;;;-1:-1:-1;;;980:69:28;;;;;;;;;;;;-1:-1:-1;;;980:69:28;;;;;;;;;;;;;;;4338:27:44;4353:4;4359:5;4338:14;:27::i;:::-;775:1:28;4199:173:44;;:::o;508:90:67:-;350:20;359:10;350:8;:20::i;:::-;342:29;;;;;;572:19;583:7;572:10;:19::i;973:113:69:-;350:20:67;359:10;350:8;:20::i;:::-;342:29;;;;;;689:7:69;;;;688:8;680:17;;;;;;1032:7;:14;;-1:-1:-1;;1032:14:69;1042:4;1032:14;;;1061:18;;;1068:10;1061:18;;;;;;;;;;;;;973:113::o;659:77:72:-;723:6;;-1:-1:-1;;;;;723:6:72;;659:77::o;979:90::-;1056:6;;-1:-1:-1;;;;;1056:6:72;1042:10;:20;;979:90::o;432:20:49:-;;;;;;;;;;;;;;;-1:-1:-1;;432:20:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;508:90:66;350:20;359:10;350:8;:20::i;:::-;342:29;;;;;;572:19;583:7;572:10;:19::i;604:75::-;647:25;661:10;647:13;:25::i;5161:184:44:-;5262:4;5289:49;5313:7;5322:15;5289:23;:49::i;1405:188::-;1466:4;1482:19;1504:34;1516:10;1528:2;1532:5;1504:11;:34::i;:::-;1482:56;;1555:31;1570:2;1574:11;1555:14;:31::i;:::-;1548:38;1405:188;-1:-1:-1;;;;1405:188:44:o;395:107:66:-;451:4;474:21;:8;487:7;474:21;:12;:21;:::i;185:29:42:-;;;-1:-1:-1;;;;;185:29:42;;:::o;5491:140:44:-;5576:7;;:48;;;-1:-1:-1;;;5576:48:44;;;;;;;;-1:-1:-1;5576:48:44;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;5576:7:44;;;;:17;;:48;;;;;;;;;;;:7;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;5576:48:44;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5576:48:44;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5576:48:44;;;;;;;;;-1:-1:-1;5576:48:44;-1:-1:-1;5491:140:44;;;:::o;1669:129:73:-;-1:-1:-1;;;;;1767:15:73;;;1741:7;1767:15;;;-1:-1:-1;1767:15:73;;;;;;;;:24;;;;;;;;;;;;;1669:129::o;6175:110:44:-;863:9:72;:7;:9::i;:::-;855:18;;;;;;6250:12:44;:28;;-1:-1:-1;;;;;;6250:28:44;-1:-1:-1;;;;;6250:28:44;;;;;;;;;;6175:110::o;758:128:14:-;863:9:72;:7;:9::i;:::-;855:18;;;;;;828:8:14;-1:-1:-1;;;;;828:21:14;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;828:23:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;828:23:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;861:7:14;:18;;-1:-1:-1;;;;;;861:18:14;-1:-1:-1;;;;;861:18:14;;;;;;;;;;758:128::o;1655:107:72:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;517:138:77:-;689:7:69;;596:4:77;;689:7:69;;688:8;680:17;;;;;;619:29:77;633:7;642:5;619:13;:29::i;1827:192:43:-;1958:18;2002:10;;;1827:192::o;6581:737:44:-;6701:7;6721:14;6737:15;6756:34;6764:5;6771:7;6780:9;6756:7;:34::i;:::-;6720:70;;;;6813:1;6804:6;:10;:49;;;;-1:-1:-1;6819:8:44;;:34;;;-1:-1:-1;;;6819:34:44;;6842:10;6819:34;;;;;;-1:-1:-1;;;;;6819:8:44;;;;:22;;:34;;;;;;;;;;;;;;;:8;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;6819:34:44;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6819:34:44;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6819:34:44;6818:35;6804:49;6800:490;;;6894:19;;;:62;;;6938:18;6948:7;6938:9;:18::i;:::-;6917:17;:5;6927:6;6917:17;:9;:17;:::i;:::-;:39;;6894:62;6869:153;;;;;-1:-1:-1;;;6869:153:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7040:21:44;;7051:10;7040:21;7036:184;;;7096:12;;7081:36;;-1:-1:-1;;;;;7096:12:44;7110:6;7081:14;:36::i;:::-;;7036:184;;;7184:12;;7156:49;;7175:7;;-1:-1:-1;;;;;7184:12:44;7198:6;7156:18;:49::i;:::-;;7036:184;7241:10;:38;;7262:17;:5;7272:6;7262:17;:9;:17;:::i;:::-;7241:38;;;7254:5;7241:38;7234:45;;;;;;6800:490;-1:-1:-1;7306:5:44;;6581:737;-1:-1:-1;;;;6581:737:44:o;353:158:77:-;689:7:69;;446:4:77;;689:7:69;;688:8;680:17;;;;;;469:35:77;488:4;494:2;498:5;469:18;:35::i;661:173::-;689:7:69;;752:12:77;;689:7:69;;688:8;680:17;;;;;;783:44:77;807:7;816:10;783:23;:44::i;804:402:43:-;689:7:69;;941:4:43;;689:7:69;;688:8;680:17;;;;;;957:8:43;968:27;983:3;988:6;968:14;:27::i;:::-;1010:40;;;;;;;;;;;;;;;;;;;;;;;;957:38;;-1:-1:-1;;;;;;1010:40:43;;;1019:10;;1010:40;;;;;;;;;;;;;;;;;;;-1:-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;1010:40:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:15;1076:3;1065:10;:15::i;:::-;1061:119;;;1104:36;1121:3;1126:6;1134:5;1104:16;:36::i;:::-;1096:73;;;;;-1:-1:-1;;;1096:73:43;;;;;;;;;;;;;;;;;;;;;;;;;;;1431:145:71;1489:7;1520:5;;;1543:6;;;;1535:15;;;;;6198:263:73;-1:-1:-1;;;;;6272:21:73;;6264:30;;;;;;6320:12;;:23;;6337:5;6320:23;:16;:23;:::i;:::-;6305:12;:38;-1:-1:-1;;;;;6374:18:73;;:9;:18;;;;;;;;;;;:29;;6397:5;6374:22;:29::i;:::-;-1:-1:-1;;;;;6353:18:73;;:9;:18;;;;;;;;;;;:50;;;;6418:36;;;;;;;6353:18;;:9;;6418:36;;;;;;;;;;6198:263;;:::o;295:77:74:-;341:24;347:10;359:5;341;:24::i;786:162:65:-;858:4;-1:-1:-1;;;;;882:21:65;;874:30;;;;;;-1:-1:-1;;;;;;921:20:65;:11;:20;;;;;;;;;;;;;;;786:162::o;810:127:67:-;869:24;:8;885:7;869:24;:15;:24;:::i;:::-;908:22;;-1:-1:-1;;;;;908:22:67;;;;;;;;810:127;:::o;624:93:74:-;688:22;698:4;704:5;688:9;:22::i;:::-;624:93;;:::o;685:119:67:-;741:21;:8;754:7;741:21;:12;:21;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:67;;;;;;;;685:119;:::o;::66:-;741:21;:8;754:7;741:21;:12;:21;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:66;;;;;;;;685:119;:::o;810:127::-;869:24;:8;885:7;869:24;:15;:24;:::i;:::-;908:22;;-1:-1:-1;;;;;908:22:66;;;;;;;;810:127;:::o;840:183:77:-;689:7:69;;936:12:77;;689:7:69;;688:8;680:17;;;;;;967:49:77;991:7;1000:15;967:23;:49::i;217:130::-;689:7:69;;292:4:77;;689:7:69;;688:8;680:17;;;;;;315:25:77;330:2;334:5;315:14;:25::i;1906:183:72:-;-1:-1:-1;;;;;1979:22:72;;1971:31;;;;;;2038:6;;2017:38;;-1:-1:-1;;;;;2017:38:72;;;;2038:6;;2017:38;;2038:6;;2017:38;2065:6;:17;;-1:-1:-1;;;;;;2065:17:72;-1:-1:-1;;;;;2065:17:72;;;;;;;;;;1906:183::o;2735:238:73:-;2800:4;-1:-1:-1;;;;;2824:21:73;;2816:30;;;;;;2866:10;2857:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;2857:29:73;;;;;;;;;;;:37;;;2909:36;;;;;;;-1:-1:-1;;2857:29:73;;2866:10;2909:36;;2857:20;-1:-1:-1;2857:20:73;-1:-1:-1;;;;;2909:36:73;;;;;;;;;;-1:-1:-1;2962:4:73;2735:238;;;;:::o;1205:145:71:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:71;;;1205:145::o;3436:294:73:-;-1:-1:-1;;;;;3560:14:73;;3515:4;3560:14;;;-1:-1:-1;3560:14:73;;;;;;;;3575:10;3560:26;;;;;;;;:37;;3591:5;3560:30;:37::i;:::-;-1:-1:-1;;;;;3531:14:73;;;;;;-1:-1:-1;3531:14:73;;;;;;;;3546:10;3531:26;;;;;;;:66;3607:26;3531:14;3623:2;3627:5;3607:9;:26::i;:::-;-1:-1:-1;;;;;3648:54:73;;3675:14;;;;-1:-1:-1;3675:14:73;;;;;;;;3663:10;3675:26;;;;;;;;;;3648:54;;;;;;;-1:-1:-1;;3663:10:73;;3648:54;;;3675:14;-1:-1:-1;3675:14:73;-1:-1:-1;;;;;3648:54:73;;;;;;;;;;-1:-1:-1;3719:4:73;3436:294;;;;;:::o;4233:317::-;4313:4;-1:-1:-1;;;;;4337:21:73;;4329:30;;;;;;4411:10;4402:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;4402:29:73;;;;;;;;;;:45;;4436:10;4402:33;:45::i;:::-;4379:10;4370:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;4370:29:73;;;;;;;;;;;:77;;;4462:60;;;;;;;-1:-1:-1;;4370:29:73;;4462:60;;;;4370:20;-1:-1:-1;4370:20:73;-1:-1:-1;;;;;4462:60:73;;;;;;;;;;-1:-1:-1;4539:4:73;4233:317;;;;:::o;1320:343:43:-;1534:51;;-1:-1:-1;;;1534:51:43;;1559:10;1534:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1499:3:43;;-1:-1:-1;;;;;1534:24:43;;;;;1559:10;;1534:51;;;;;;;;;;;;;;;;;-1:-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;1534:51:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1534:51:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1534:51:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1534:51:43;1513:122;;;;;-1:-1:-1;;;1513:122:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1652:4:43;;1320:343;-1:-1:-1;;;;1320:343:43:o;6687:263:73:-;-1:-1:-1;;;;;6761:21:73;;6753:30;;;;;;6809:12;;:23;;6826:5;6809:23;:16;:23;:::i;:::-;6794:12;:38;-1:-1:-1;;;;;6863:18:73;;:9;:18;;;;;;;;;;;:29;;6886:5;6863:22;:29::i;:::-;-1:-1:-1;;;;;6842:18:73;;:9;:18;;;;;;;;;;;:50;;;;6907:36;;;;;;;6842:9;;6907:36;;;;;;;;;;;6687:263;;:::o;514:184:65:-;-1:-1:-1;;;;;593:21:65;;585:30;;;;;;633:18;637:4;643:7;633:3;:18::i;:::-;625:27;;;;;;-1:-1:-1;;;;;663:20:65;686:5;663:20;;;;;;;;;;;:28;;-1:-1:-1;;663:28:65;;;514:184::o;7339:255:73:-;-1:-1:-1;;;;;7441:17:73;;;;;;-1:-1:-1;7441:17:73;;;;;;;;7459:10;7441:29;;;;;;;;:40;;7475:5;7441:33;:40::i;:::-;-1:-1:-1;;;;;7409:17:73;;;;;;-1:-1:-1;7409:17:73;;;;;;;;7427:10;7409:29;;;;;;;:72;7491:21;7409:17;7506:5;7491;:21::i;:::-;-1:-1:-1;;;;;7527:60:73;;7557:17;;;;-1:-1:-1;7557:17:73;;;;;;;;7545:10;7557:29;;;;;;;;;;7527:60;;;;;;;-1:-1:-1;;7545:10:73;;7527:60;;;7557:17;-1:-1:-1;7557:17:73;-1:-1:-1;;;;;7527:60:73;;;;;;;;;;7339:255;;:::o;259:181:65:-;-1:-1:-1;;;;;335:21:65;;327:30;;;;;;376:18;380:4;386:7;376:3;:18::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:65;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:65;-1:-1:-1;406:27:65;;;259:181::o;5058:327:73:-;5143:4;-1:-1:-1;;;;;5167:21:73;;5159:30;;;;;;5241:10;5232:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;5232:29:73;;;;;;;;;;:50;;5266:15;5232:33;:50::i;1962:137::-;2023:4;2039:32;2049:10;2061:2;2065:5;2039:9;:32::i;:::-;-1:-1:-1;2088:4:73;1962:137;;;;:::o;5599:256::-;-1:-1:-1;;;;;5686:16:73;;5678:25;;;;;;-1:-1:-1;;;;;5732:15:73;;:9;:15;;;;;;;;;;;:26;;5752:5;5732:19;:26::i;:::-;-1:-1:-1;;;;;5714:15:73;;;:9;:15;;;;;;;;;;;:44;;;;5784:13;;;;;;;:24;;5802:5;5784:17;:24::i;:::-;-1:-1:-1;;;;;5768:13:73;;;:9;:13;;;;;;;;;;;;:40;;;;5823:25;;;;;;;5768:13;;5823:25;;;;;;;;;;;;;5599:256;;;:::o",
  "source": "pragma solidity >0.5.4;\n\nimport \"../identity/IdentityGuard.sol\";\nimport \"../dao/schemes/FormulaHolder.sol\";\nimport \"./ERC677BridgeToken.sol\";\n\n/**\n * @title The GoodDollar ERC677 token contract\n */\ncontract GoodDollar is ERC677BridgeToken, IdentityGuard, FormulaHolder {\n    address feeRecipient;\n\n    // Overrides hard-coded decimal in DAOToken\n    uint256 public constant decimals = 2;\n\n    /**\n     * @dev constructor\n     * @param _name The name of the token\n     * @param _symbol The symbol of the token\n     * @param _cap the cap of the token. no cap if 0\n     * @param _formula the fee formula contract\n     * @param _identity the identity contract\n     * @param _feeRecipient the address that receives transaction fees\n     */\n    constructor(\n        string memory _name,\n        string memory _symbol,\n        uint256 _cap,\n        AbstractFees _formula,\n        Identity _identity,\n        address _feeRecipient\n    )\n        public\n        ERC677BridgeToken(_name, _symbol, _cap)\n        IdentityGuard(_identity)\n        FormulaHolder(_formula)\n    {\n        feeRecipient = _feeRecipient;\n    }\n\n    /**\n     * @dev Processes fees from given value and sends\n     * remainder to given address\n     * @param to the address to be sent to\n     * @param value the value to be processed and then\n     * transferred\n     * @return a boolean that indicates if the operation was successful\n     */\n    function transfer(address to, uint256 value) public returns (bool) {\n        uint256 bruttoValue = processFees(msg.sender, to, value);\n        return super.transfer(to, bruttoValue);\n    }\n\n    /**\n     * @dev Approve the passed address to spend the specified\n     * amount of tokens on behalf of msg.sender\n     * @param spender The address which will spend the funds\n     * @param value The amount of tokens to be spent\n     * @return a boolean that indicates if the operation was successful\n     */\n    function approve(address spender, uint256 value) public returns (bool) {\n        return super.approve(spender, value);\n    }\n\n    /**\n     * @dev Transfer tokens from one address to another\n     * @param from The address which you want to send tokens from\n     * @param to The address which you want to transfer to\n     * @param value the amount of tokens to be transferred\n     * @return a boolean that indicates if the operation was successful\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 value\n    ) public returns (bool) {\n        uint256 bruttoValue = processFees(from, to, value);\n        return super.transferFrom(from, to, bruttoValue);\n    }\n\n    /**\n     * @dev Processes transfer fees and calls ERC677Token transferAndCall function\n     * @param to address to transfer to\n     * @param value the amount to transfer\n     * @param data The data to pass to transferAndCall\n     * @return a bool indicating if transfer function succeeded\n     */\n    function transferAndCall(\n        address to,\n        uint256 value,\n        bytes calldata data\n    ) external returns (bool) {\n        uint256 bruttoValue = processFees(msg.sender, to, value);\n        return super._transferAndCall(to, bruttoValue, data);\n    }\n\n    /**\n     * @dev Minting function\n     * @param to the address that will receive the minted tokens\n     * @param value the amount of tokens to mint\n     * @return a boolean that indicated if the operation was successful\n     */\n    function mint(address to, uint256 value)\n        public\n        onlyMinter\n        requireNotBlacklisted(to)\n        returns (bool)\n    {\n        if (cap > 0) {\n            require(totalSupply().add(value) <= cap, \"Cannot increase supply beyond cap\");\n        }\n        super._mint(to, value);\n        return true;\n    }\n\n    /**\n     * @dev Burns a specific amount of tokens.\n     * @param value The amount of token to be burned.\n     */\n    function burn(uint256 value) public onlyNotBlacklisted {\n        super.burn(value);\n    }\n\n    /**\n     * @dev Burns a specific amount of tokens from the target address and decrements allowance\n     * @param from address The address which you want to send tokens from\n     * @param value uint256 The amount of token to be burned\n     */\n    function burnFrom(address from, uint256 value)\n        public\n        onlyNotBlacklisted\n        requireNotBlacklisted(from)\n    {\n        super.burnFrom(from, value);\n    }\n\n    /**\n     * @dev Increase the amount of tokens that an owner allows a spender\n     * @param spender The address which will spend the funds\n     * @param addedValue The amount of tokens to increase the allowance by\n     * @return a boolean that indicated if the operation was successful\n     */\n    function increaseAllowance(address spender, uint256 addedValue)\n        public\n        returns (bool)\n    {\n        return super.increaseAllowance(spender, addedValue);\n    }\n\n    /**\n     * @dev Decrease the amount of tokens that an owner allowed to a spender\n     * @param spender The address which will spend the funds\n     * @param subtractedValue The amount of tokens to decrease the allowance by\n     * @return a boolean that indicated if the operation was successful\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue)\n        public\n        returns (bool)\n    {\n        return super.decreaseAllowance(spender, subtractedValue);\n    }\n\n    /**\n     * @dev Gets the current transaction fees\n     * @return an uint256 that represents\n     * the current transaction fees\n     */\n    function getFees(uint256 value) public view returns (uint256, bool) {\n        return formula.getTxFees(value, address(0), address(0));\n    }\n\n    /**\n     * @dev Gets the current transaction fees\n     * @return an uint256 that represents\n     * the current transaction fees\n     */\n    function getFees(\n        uint256 value,\n        address sender,\n        address recipient\n    ) public view returns (uint256, bool) {\n        return formula.getTxFees(value, sender, recipient);\n    }\n\n    /**\n     * @dev Sets the address that receives the transactional fees.\n     * can only be called by owner\n     * @param _feeRecipient The new address to receive transactional fees\n     */\n    function setFeeRecipient(address _feeRecipient) public onlyOwner {\n        feeRecipient = _feeRecipient;\n    }\n\n    /**\n     * @dev Sends transactional fees to feeRecipient address from given address\n     * @param account The account that sends the fees\n     * @param value The amount to subtract fees from\n     * @return an uint256 that represents the given value minus the transactional fees\n     */\n    function processFees(\n        address account,\n        address recipient,\n        uint256 value\n    ) internal returns (uint256) {\n        (uint256 txFees, bool senderPays) = getFees(value, account, recipient);\n        if (txFees > 0 && !identity.isDAOContract(msg.sender)) {\n            require(\n                senderPays == false || value.add(txFees) <= balanceOf(account),\n                \"Not enough balance to pay TX fee\"\n            );\n            if (account == msg.sender) {\n                super.transfer(feeRecipient, txFees);\n            } else {\n                super.transferFrom(account, feeRecipient, txFees);\n            }\n\n            return senderPays ? value : value.sub(txFees);\n        }\n        return value;\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
    "exportedSymbols": {
      "GoodDollar": [
        7633
      ]
    },
    "id": 7634,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7249,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:44"
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityGuard.sol",
        "file": "../identity/IdentityGuard.sol",
        "id": 7250,
        "nodeType": "ImportDirective",
        "scope": 7634,
        "sourceUnit": 5735,
        "src": "25:39:44",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FormulaHolder.sol",
        "file": "../dao/schemes/FormulaHolder.sol",
        "id": 7251,
        "nodeType": "ImportDirective",
        "scope": 7634,
        "sourceUnit": 3014,
        "src": "65:42:44",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677BridgeToken.sol",
        "file": "./ERC677BridgeToken.sol",
        "id": 7252,
        "nodeType": "ImportDirective",
        "scope": 7634,
        "sourceUnit": 7127,
        "src": "108:33:44",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7253,
              "name": "ERC677BridgeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7126,
              "src": "221:17:44",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC677BridgeToken_$7126",
                "typeString": "contract ERC677BridgeToken"
              }
            },
            "id": 7254,
            "nodeType": "InheritanceSpecifier",
            "src": "221:17:44"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7255,
              "name": "IdentityGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5734,
              "src": "240:13:44",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IdentityGuard_$5734",
                "typeString": "contract IdentityGuard"
              }
            },
            "id": 7256,
            "nodeType": "InheritanceSpecifier",
            "src": "240:13:44"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7257,
              "name": "FormulaHolder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3013,
              "src": "255:13:44",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FormulaHolder_$3013",
                "typeString": "contract FormulaHolder"
              }
            },
            "id": 7258,
            "nodeType": "InheritanceSpecifier",
            "src": "255:13:44"
          }
        ],
        "contractDependencies": [
          3013,
          5734,
          7061,
          7126,
          7247,
          10306,
          16680,
          16783,
          16947,
          17253,
          17685,
          17716,
          17904,
          17973
        ],
        "contractKind": "contract",
        "documentation": "@title The GoodDollar ERC677 token contract",
        "fullyImplemented": true,
        "id": 7633,
        "linearizedBaseContracts": [
          7633,
          3013,
          5734,
          7126,
          16680,
          7247,
          17904,
          16947,
          16783,
          10306,
          17253,
          17716,
          17685,
          17973,
          7061
        ],
        "name": "GoodDollar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 7260,
            "name": "feeRecipient",
            "nodeType": "VariableDeclaration",
            "scope": 7633,
            "src": "275:20:44",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7259,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "275:7:44",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7263,
            "name": "decimals",
            "nodeType": "VariableDeclaration",
            "scope": 7633,
            "src": "350:36:44",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 7261,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "350:7:44",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "32",
              "id": 7262,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "385:1:44",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2_by_1",
                "typeString": "int_const 2"
              },
              "value": "2"
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 7293,
              "nodeType": "Block",
              "src": "1061:45:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7289,
                      "name": "feeRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7260,
                      "src": "1071:12:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7290,
                      "name": "_feeRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7275,
                      "src": "1086:13:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1071:28:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7292,
                  "nodeType": "ExpressionStatement",
                  "src": "1071:28:44"
                }
              ]
            },
            "documentation": "@dev constructor\n@param _name The name of the token\n@param _symbol The symbol of the token\n@param _cap the cap of the token. no cap if 0\n@param _formula the fee formula contract\n@param _identity the identity contract\n@param _feeRecipient the address that receives transaction fees",
            "id": 7294,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7278,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7265,
                    "src": "970:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7279,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7267,
                    "src": "977:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7280,
                    "name": "_cap",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7269,
                    "src": "986:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 7281,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7277,
                  "name": "ERC677BridgeToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7126,
                  "src": "952:17:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ERC677BridgeToken_$7126_$",
                    "typeString": "type(contract ERC677BridgeToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "952:39:44"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7283,
                    "name": "_identity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7273,
                    "src": "1014:9:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$5447",
                      "typeString": "contract Identity"
                    }
                  }
                ],
                "id": 7284,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7282,
                  "name": "IdentityGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5734,
                  "src": "1000:13:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IdentityGuard_$5734_$",
                    "typeString": "type(contract IdentityGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1000:24:44"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7286,
                    "name": "_formula",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7271,
                    "src": "1047:8:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AbstractFees_$2581",
                      "typeString": "contract AbstractFees"
                    }
                  }
                ],
                "id": 7287,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7285,
                  "name": "FormulaHolder",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3013,
                  "src": "1033:13:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FormulaHolder_$3013_$",
                    "typeString": "type(contract FormulaHolder)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1033:23:44"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7265,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "760:19:44",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7264,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "760:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7267,
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "789:21:44",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7266,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "789:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7269,
                  "name": "_cap",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "820:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7268,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "820:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7271,
                  "name": "_formula",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "842:21:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AbstractFees_$2581",
                    "typeString": "contract AbstractFees"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7270,
                    "name": "AbstractFees",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2581,
                    "src": "842:12:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AbstractFees_$2581",
                      "typeString": "contract AbstractFees"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7273,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "873:18:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$5447",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7272,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5447,
                    "src": "873:8:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$5447",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7275,
                  "name": "_feeRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "901:21:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "901:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "750:178:44"
            },
            "returnParameters": {
              "id": 7288,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1061:0:44"
            },
            "scope": 7633,
            "src": "739:367:44",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7318,
              "nodeType": "Block",
              "src": "1472:121:44",
              "statements": [
                {
                  "assignments": [
                    7304
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7304,
                      "name": "bruttoValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 7318,
                      "src": "1482:19:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7303,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1482:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7311,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7306,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18007,
                          "src": "1516:3:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1516:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7308,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7296,
                        "src": "1528:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7309,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7298,
                        "src": "1532:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7305,
                      "name": "processFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7632,
                      "src": "1504:11:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 7310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1504:34:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1482:56:44"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7314,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7296,
                        "src": "1570:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7315,
                        "name": "bruttoValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7304,
                        "src": "1574:11:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7312,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "1555:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17828,
                      "src": "1555:14:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 7316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1555:31:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7302,
                  "id": 7317,
                  "nodeType": "Return",
                  "src": "1548:38:44"
                }
              ]
            },
            "documentation": "@dev Processes fees from given value and sends\nremainder to given address\n@param to the address to be sent to\n@param value the value to be processed and then\ntransferred\n@return a boolean that indicates if the operation was successful",
            "id": 7319,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7296,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7319,
                  "src": "1423:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7295,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1423:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7298,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7319,
                  "src": "1435:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1435:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1422:27:44"
            },
            "returnParameters": {
              "id": 7302,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7301,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7319,
                  "src": "1466:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7300,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1466:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1465:6:44"
            },
            "scope": 7633,
            "src": "1405:188:44",
            "stateMutability": "nonpayable",
            "superFunction": 17828,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7334,
              "nodeType": "Block",
              "src": "1982:53:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7330,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7321,
                        "src": "2013:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7331,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7323,
                        "src": "2022:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7328,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "1999:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7329,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17867,
                      "src": "1999:13:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 7332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1999:29:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7327,
                  "id": 7333,
                  "nodeType": "Return",
                  "src": "1992:36:44"
                }
              ]
            },
            "documentation": "@dev Approve the passed address to spend the specified\namount of tokens on behalf of msg.sender\n@param spender The address which will spend the funds\n@param value The amount of tokens to be spent\n@return a boolean that indicates if the operation was successful",
            "id": 7335,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7321,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7335,
                  "src": "1928:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7320,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1928:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7323,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7335,
                  "src": "1945:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7322,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1945:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1927:32:44"
            },
            "returnParameters": {
              "id": 7327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7326,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7335,
                  "src": "1976:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7325,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1976:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1975:6:44"
            },
            "scope": 7633,
            "src": "1911:124:44",
            "stateMutability": "nonpayable",
            "superFunction": 17867,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7361,
              "nodeType": "Block",
              "src": "2484:125:44",
              "statements": [
                {
                  "assignments": [
                    7347
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7347,
                      "name": "bruttoValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 7361,
                      "src": "2494:19:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7346,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2494:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7353,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7349,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7337,
                        "src": "2528:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7350,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7339,
                        "src": "2534:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7351,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7341,
                        "src": "2538:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7348,
                      "name": "processFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7632,
                      "src": "2516:11:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 7352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2516:28:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2494:50:44"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7356,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7337,
                        "src": "2580:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7357,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7339,
                        "src": "2586:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7358,
                        "name": "bruttoValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7347,
                        "src": "2590:11:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7354,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "2561:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17849,
                      "src": "2561:18:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) returns (bool)"
                      }
                    },
                    "id": 7359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2561:41:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7345,
                  "id": 7360,
                  "nodeType": "Return",
                  "src": "2554:48:44"
                }
              ]
            },
            "documentation": "@dev Transfer tokens from one address to another\n@param from The address which you want to send tokens from\n@param to The address which you want to transfer to\n@param value the amount of tokens to be transferred\n@return a boolean that indicates if the operation was successful",
            "id": 7362,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7342,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7337,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 7362,
                  "src": "2400:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7336,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2400:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7339,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7362,
                  "src": "2422:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7338,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2422:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7341,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7362,
                  "src": "2442:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7340,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2442:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2390:71:44"
            },
            "returnParameters": {
              "id": 7345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7344,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7362,
                  "src": "2478:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7343,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2478:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2477:6:44"
            },
            "scope": 7633,
            "src": "2369:240:44",
            "stateMutability": "nonpayable",
            "superFunction": 17849,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7389,
              "nodeType": "Block",
              "src": "3043:135:44",
              "statements": [
                {
                  "assignments": [
                    7374
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7374,
                      "name": "bruttoValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 7389,
                      "src": "3053:19:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7373,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3053:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7381,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7376,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18007,
                          "src": "3087:3:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3087:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7378,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7364,
                        "src": "3099:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7379,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7366,
                        "src": "3103:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7375,
                      "name": "processFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7632,
                      "src": "3075:11:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 7380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3075:34:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3053:56:44"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7384,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7364,
                        "src": "3149:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7385,
                        "name": "bruttoValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7374,
                        "src": "3153:11:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7386,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7368,
                        "src": "3166:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7382,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "3126:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_transferAndCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7199,
                      "src": "3126:22:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,uint256,bytes memory) returns (bool)"
                      }
                    },
                    "id": 7387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3126:45:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7372,
                  "id": 7388,
                  "nodeType": "Return",
                  "src": "3119:52:44"
                }
              ]
            },
            "documentation": "@dev Processes transfer fees and calls ERC677Token transferAndCall function\n@param to address to transfer to\n@param value the amount to transfer\n@param data The data to pass to transferAndCall\n@return a bool indicating if transfer function succeeded",
            "id": 7390,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferAndCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7369,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7364,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7390,
                  "src": "2950:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7363,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2950:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7366,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7390,
                  "src": "2970:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7365,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2970:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7368,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 7390,
                  "src": "2993:19:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7367,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2993:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2940:78:44"
            },
            "returnParameters": {
              "id": 7372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7371,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7390,
                  "src": "3037:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7370,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3037:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3036:6:44"
            },
            "scope": 7633,
            "src": "2916:262:44",
            "stateMutability": "nonpayable",
            "superFunction": 7060,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7429,
              "nodeType": "Block",
              "src": "3551:184:44",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7404,
                      "name": "cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10250,
                      "src": "3565:3:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3571:1:44",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3565:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7419,
                  "nodeType": "IfStatement",
                  "src": "3561:115:44",
                  "trueBody": {
                    "id": 7418,
                    "nodeType": "Block",
                    "src": "3574:102:44",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 7411,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7394,
                                    "src": "3614:5:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 7408,
                                      "name": "totalSupply",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17282,
                                      "src": "3596:11:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view returns (uint256)"
                                      }
                                    },
                                    "id": 7409,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3596:13:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7410,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 17123,
                                  "src": "3596:17:44",
                                  "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": 7412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3596:24:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 7413,
                                "name": "cap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10250,
                                "src": "3624:3:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3596:31:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "43616e6e6f7420696e63726561736520737570706c79206265796f6e6420636170",
                              "id": 7415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3629:35:44",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0496a7c3b148a57cd5e6850cac361519e030f78a4931ffcd8cdc17574565f513",
                                "typeString": "literal_string \"Cannot increase supply beyond cap\""
                              },
                              "value": "Cannot increase supply beyond cap"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0496a7c3b148a57cd5e6850cac361519e030f78a4931ffcd8cdc17574565f513",
                                "typeString": "literal_string \"Cannot increase supply beyond cap\""
                              }
                            ],
                            "id": 7407,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              18010,
                              18011
                            ],
                            "referencedDeclaration": 18011,
                            "src": "3588:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3588:77:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7417,
                        "nodeType": "ExpressionStatement",
                        "src": "3588:77:44"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7423,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7392,
                        "src": "3697:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7424,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7394,
                        "src": "3701:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7420,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "3685:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7422,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17600,
                      "src": "3685:11:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3685:22:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7426,
                  "nodeType": "ExpressionStatement",
                  "src": "3685:22:44"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3724:4:44",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7403,
                  "id": 7428,
                  "nodeType": "Return",
                  "src": "3717:11:44"
                }
              ]
            },
            "documentation": "@dev Minting function\n@param to the address that will receive the minted tokens\n@param value the amount of tokens to mint\n@return a boolean that indicated if the operation was successful",
            "id": 7430,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7397,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7396,
                  "name": "onlyMinter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16613,
                  "src": "3479:10:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3479:10:44"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7399,
                    "name": "to",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7392,
                    "src": "3520:2:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7400,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7398,
                  "name": "requireNotBlacklisted",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5630,
                  "src": "3498:21:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3498:25:44"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7392,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7430,
                  "src": "3429:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7391,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3429:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7394,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7430,
                  "src": "3441:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3441:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3428:27:44"
            },
            "returnParameters": {
              "id": 7403,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7402,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7430,
                  "src": "3541:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7401,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3541:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3540:6:44"
            },
            "scope": 7633,
            "src": "3415:320:44",
            "stateMutability": "nonpayable",
            "superFunction": 10305,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7443,
              "nodeType": "Block",
              "src": "3913:34:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7440,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7432,
                        "src": "3934:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7437,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "3923:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17702,
                      "src": "3923:10:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3923:17:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7442,
                  "nodeType": "ExpressionStatement",
                  "src": "3923:17:44"
                }
              ]
            },
            "documentation": "@dev Burns a specific amount of tokens.\n@param value The amount of token to be burned.",
            "id": 7444,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7435,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7434,
                  "name": "onlyNotBlacklisted",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5615,
                  "src": "3894:18:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3894:18:44"
              }
            ],
            "name": "burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7432,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7444,
                  "src": "3872:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7431,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3872:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3871:15:44"
            },
            "returnParameters": {
              "id": 7436,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3913:0:44"
            },
            "scope": 7633,
            "src": "3858:89:44",
            "stateMutability": "nonpayable",
            "superFunction": 17702,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7463,
              "nodeType": "Block",
              "src": "4328:44:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7459,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7446,
                        "src": "4353:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7460,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7448,
                        "src": "4359:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7456,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "4338:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burnFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17715,
                      "src": "4338:14:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4338:27:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7462,
                  "nodeType": "ExpressionStatement",
                  "src": "4338:27:44"
                }
              ]
            },
            "documentation": "@dev Burns a specific amount of tokens from the target address and decrements allowance\n@param from address The address which you want to send tokens from\n@param value uint256 The amount of token to be burned",
            "id": 7464,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7451,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7450,
                  "name": "onlyNotBlacklisted",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5615,
                  "src": "4269:18:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4269:18:44"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7453,
                    "name": "from",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7446,
                    "src": "4318:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7454,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7452,
                  "name": "requireNotBlacklisted",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5630,
                  "src": "4296:21:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4296:27:44"
              }
            ],
            "name": "burnFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7446,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 7464,
                  "src": "4217:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7445,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4217:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7448,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7464,
                  "src": "4231:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7447,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4231:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4216:29:44"
            },
            "returnParameters": {
              "id": 7455,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4328:0:44"
            },
            "scope": 7633,
            "src": "4199:173:44",
            "stateMutability": "nonpayable",
            "superFunction": 17715,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7479,
              "nodeType": "Block",
              "src": "4781:68:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7475,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7466,
                        "src": "4822:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7476,
                        "name": "addedValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7468,
                        "src": "4831:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7473,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "4798:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "increaseAllowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17885,
                      "src": "4798:23:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 7477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4798:44:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7472,
                  "id": 7478,
                  "nodeType": "Return",
                  "src": "4791:51:44"
                }
              ]
            },
            "documentation": "@dev Increase the amount of tokens that an owner allows a spender\n@param spender The address which will spend the funds\n@param addedValue The amount of tokens to increase the allowance by\n@return a boolean that indicated if the operation was successful",
            "id": 7480,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "increaseAllowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7466,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7480,
                  "src": "4702:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7465,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4702:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7468,
                  "name": "addedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 7480,
                  "src": "4719:18:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7467,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4719:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4701:37:44"
            },
            "returnParameters": {
              "id": 7472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7471,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7480,
                  "src": "4771:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7470,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4771:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4770:6:44"
            },
            "scope": 7633,
            "src": "4675:174:44",
            "stateMutability": "nonpayable",
            "superFunction": 17885,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7495,
              "nodeType": "Block",
              "src": "5272:73:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7491,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7482,
                        "src": "5313:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7492,
                        "name": "subtractedValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7484,
                        "src": "5322:15:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7489,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "5289:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "decreaseAllowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17903,
                      "src": "5289:23:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 7493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5289:49:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7488,
                  "id": 7494,
                  "nodeType": "Return",
                  "src": "5282:56:44"
                }
              ]
            },
            "documentation": "@dev Decrease the amount of tokens that an owner allowed to a spender\n@param spender The address which will spend the funds\n@param subtractedValue The amount of tokens to decrease the allowance by\n@return a boolean that indicated if the operation was successful",
            "id": 7496,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decreaseAllowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7482,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7496,
                  "src": "5188:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5188:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7484,
                  "name": "subtractedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 7496,
                  "src": "5205:23:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5205:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5187:42:44"
            },
            "returnParameters": {
              "id": 7488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7487,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7496,
                  "src": "5262:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5262:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5261:6:44"
            },
            "scope": 7633,
            "src": "5161:184:44",
            "stateMutability": "nonpayable",
            "superFunction": 17903,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7516,
              "nodeType": "Block",
              "src": "5559:72:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7507,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7498,
                        "src": "5594:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5609:1:44",
                            "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": 7508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5601:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7510,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5601:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7512,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5621:1:44",
                            "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": 7511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5613:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5613:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7505,
                        "name": "formula",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2976,
                        "src": "5576:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AbstractFees_$2581",
                          "typeString": "contract AbstractFees"
                        }
                      },
                      "id": 7506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getTxFees",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2580,
                      "src": "5576:17:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$_t_bool_$",
                        "typeString": "function (uint256,address,address) view external returns (uint256,bool)"
                      }
                    },
                    "id": 7514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5576:48:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                      "typeString": "tuple(uint256,bool)"
                    }
                  },
                  "functionReturnParameters": 7504,
                  "id": 7515,
                  "nodeType": "Return",
                  "src": "5569:55:44"
                }
              ]
            },
            "documentation": "@dev Gets the current transaction fees\n@return an uint256 that represents\nthe current transaction fees",
            "id": 7517,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFees",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7498,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7517,
                  "src": "5508:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7497,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5508:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5507:15:44"
            },
            "returnParameters": {
              "id": 7504,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7501,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7517,
                  "src": "5544:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7500,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5544:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7503,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7517,
                  "src": "5553:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7502,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5553:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5543:15:44"
            },
            "scope": 7633,
            "src": "5491:140:44",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7537,
              "nodeType": "Block",
              "src": "5910:67:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7532,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7519,
                        "src": "5945:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7533,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7521,
                        "src": "5952:6:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7534,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7523,
                        "src": "5960:9:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7530,
                        "name": "formula",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2976,
                        "src": "5927:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AbstractFees_$2581",
                          "typeString": "contract AbstractFees"
                        }
                      },
                      "id": 7531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getTxFees",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2580,
                      "src": "5927:17:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$_t_bool_$",
                        "typeString": "function (uint256,address,address) view external returns (uint256,bool)"
                      }
                    },
                    "id": 7535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5927:43:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                      "typeString": "tuple(uint256,bool)"
                    }
                  },
                  "functionReturnParameters": 7529,
                  "id": 7536,
                  "nodeType": "Return",
                  "src": "5920:50:44"
                }
              ]
            },
            "documentation": "@dev Gets the current transaction fees\n@return an uint256 that represents\nthe current transaction fees",
            "id": 7538,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFees",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7524,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7519,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5803:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7518,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5803:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7521,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5826:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7520,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5826:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7523,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5850:17:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7522,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5850:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5793:80:44"
            },
            "returnParameters": {
              "id": 7529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7526,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5895:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7525,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5895:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7528,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5904:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7527,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5904:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5894:15:44"
            },
            "scope": 7633,
            "src": "5777:200:44",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7549,
              "nodeType": "Block",
              "src": "6240:45:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7545,
                      "name": "feeRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7260,
                      "src": "6250:12:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7546,
                      "name": "_feeRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7540,
                      "src": "6265:13:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6250:28:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7548,
                  "nodeType": "ExpressionStatement",
                  "src": "6250:28:44"
                }
              ]
            },
            "documentation": "@dev Sets the address that receives the transactional fees.\ncan only be called by owner\n@param _feeRecipient The new address to receive transactional fees",
            "id": 7550,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7543,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7542,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 17187,
                  "src": "6230:9:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6230:9:44"
              }
            ],
            "name": "setFeeRecipient",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7541,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7540,
                  "name": "_feeRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "6200:21:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7539,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6200:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6199:23:44"
            },
            "returnParameters": {
              "id": 7544,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6240:0:44"
            },
            "scope": 7633,
            "src": "6175:110:44",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7631,
              "nodeType": "Block",
              "src": "6710:608:44",
              "statements": [
                {
                  "assignments": [
                    7562,
                    7564
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7562,
                      "name": "txFees",
                      "nodeType": "VariableDeclaration",
                      "scope": 7631,
                      "src": "6721:14:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7561,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6721:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7564,
                      "name": "senderPays",
                      "nodeType": "VariableDeclaration",
                      "scope": 7631,
                      "src": "6737:15:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7563,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6737:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7570,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7566,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7556,
                        "src": "6764:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7567,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7552,
                        "src": "6771:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7568,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7554,
                        "src": "6780:9:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7565,
                      "name": "getFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7517,
                        7538
                      ],
                      "referencedDeclaration": 7538,
                      "src": "6756:7:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$_t_bool_$",
                        "typeString": "function (uint256,address,address) view returns (uint256,bool)"
                      }
                    },
                    "id": 7569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6756:34:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                      "typeString": "tuple(uint256,bool)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6720:70:44"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7571,
                        "name": "txFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7562,
                        "src": "6804:6:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7572,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6813:1:44",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6804:10:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "6818:35:44",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7576,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18007,
                              "src": "6842:3:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6842:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7574,
                            "name": "identity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5582,
                            "src": "6819:8:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Identity_$5447",
                              "typeString": "contract Identity"
                            }
                          },
                          "id": 7575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isDAOContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5270,
                          "src": "6819:22:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 7578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6819:34:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6804:49:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7628,
                  "nodeType": "IfStatement",
                  "src": "6800:490:44",
                  "trueBody": {
                    "id": 7627,
                    "nodeType": "Block",
                    "src": "6855:435:44",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 7593,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 7584,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7582,
                                  "name": "senderPays",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7564,
                                  "src": "6894:10:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "66616c7365",
                                  "id": 7583,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6908:5:44",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "src": "6894:19:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7587,
                                      "name": "txFees",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7562,
                                      "src": "6927:6:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7585,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7556,
                                      "src": "6917:5:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7586,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 17123,
                                    "src": "6917:9:44",
                                    "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": 7588,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6917:17:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7590,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7552,
                                      "src": "6948:7:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 7589,
                                    "name": "balanceOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 17294,
                                    "src": "6938:9:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view returns (uint256)"
                                    }
                                  },
                                  "id": 7591,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6938:18:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6917:39:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "6894:62:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4e6f7420656e6f7567682062616c616e636520746f2070617920545820666565",
                              "id": 7594,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6974:34:44",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d8755bc09fb79e950a5e7d095cbea6768b94c4b9ef759e2c8e040327991591d6",
                                "typeString": "literal_string \"Not enough balance to pay TX fee\""
                              },
                              "value": "Not enough balance to pay TX fee"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d8755bc09fb79e950a5e7d095cbea6768b94c4b9ef759e2c8e040327991591d6",
                                "typeString": "literal_string \"Not enough balance to pay TX fee\""
                              }
                            ],
                            "id": 7581,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              18010,
                              18011
                            ],
                            "referencedDeclaration": 18011,
                            "src": "6869:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6869:153:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7596,
                        "nodeType": "ExpressionStatement",
                        "src": "6869:153:44"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7597,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7552,
                            "src": "7040:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7598,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18007,
                              "src": "7051:3:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7599,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "7051:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7040:21:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 7617,
                          "nodeType": "Block",
                          "src": "7138:82:44",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 7612,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7552,
                                    "src": "7175:7:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 7613,
                                    "name": "feeRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7260,
                                    "src": "7184:12:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 7614,
                                    "name": "txFees",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7562,
                                    "src": "7198:6:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7609,
                                    "name": "super",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18110,
                                    "src": "7156:5:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_super$_GoodDollar_$7633",
                                      "typeString": "contract super GoodDollar"
                                    }
                                  },
                                  "id": 7611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transferFrom",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 17849,
                                  "src": "7156:18:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,address,uint256) returns (bool)"
                                  }
                                },
                                "id": 7615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7156:49:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7616,
                              "nodeType": "ExpressionStatement",
                              "src": "7156:49:44"
                            }
                          ]
                        },
                        "id": 7618,
                        "nodeType": "IfStatement",
                        "src": "7036:184:44",
                        "trueBody": {
                          "id": 7608,
                          "nodeType": "Block",
                          "src": "7063:69:44",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 7604,
                                    "name": "feeRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7260,
                                    "src": "7096:12:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 7605,
                                    "name": "txFees",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7562,
                                    "src": "7110:6:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7601,
                                    "name": "super",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18110,
                                    "src": "7081:5:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_super$_GoodDollar_$7633",
                                      "typeString": "contract super GoodDollar"
                                    }
                                  },
                                  "id": 7603,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 17828,
                                  "src": "7081:14:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) returns (bool)"
                                  }
                                },
                                "id": 7606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7081:36:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7607,
                              "nodeType": "ExpressionStatement",
                              "src": "7081:36:44"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "id": 7619,
                            "name": "senderPays",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7564,
                            "src": "7241:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7623,
                                "name": "txFees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7562,
                                "src": "7272:6:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7621,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7556,
                                "src": "7262:5:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 17099,
                              "src": "7262:9:44",
                              "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": 7624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7262:17:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "7241:38:44",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 7620,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7556,
                            "src": "7254:5:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7560,
                        "id": 7626,
                        "nodeType": "Return",
                        "src": "7234:45:44"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7629,
                    "name": "value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7556,
                    "src": "7306:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7560,
                  "id": 7630,
                  "nodeType": "Return",
                  "src": "7299:12:44"
                }
              ]
            },
            "documentation": "@dev Sends transactional fees to feeRecipient address from given address\n@param account The account that sends the fees\n@param value The amount to subtract fees from\n@return an uint256 that represents the given value minus the transactional fees",
            "id": 7632,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "processFees",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7557,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7552,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 7632,
                  "src": "6611:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7551,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6611:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7554,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7632,
                  "src": "6636:17:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7553,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6636:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7556,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7632,
                  "src": "6663:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7555,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6663:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6601:81:44"
            },
            "returnParameters": {
              "id": 7560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7559,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7632,
                  "src": "6701:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6701:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6700:9:44"
            },
            "scope": 7633,
            "src": "6581:737:44",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 7634,
        "src": "198:7122:44"
      }
    ],
    "src": "0:7321:44"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
    "exportedSymbols": {
      "GoodDollar": [
        7633
      ]
    },
    "id": 7634,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7249,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:44"
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityGuard.sol",
        "file": "../identity/IdentityGuard.sol",
        "id": 7250,
        "nodeType": "ImportDirective",
        "scope": 7634,
        "sourceUnit": 5735,
        "src": "25:39:44",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FormulaHolder.sol",
        "file": "../dao/schemes/FormulaHolder.sol",
        "id": 7251,
        "nodeType": "ImportDirective",
        "scope": 7634,
        "sourceUnit": 3014,
        "src": "65:42:44",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677BridgeToken.sol",
        "file": "./ERC677BridgeToken.sol",
        "id": 7252,
        "nodeType": "ImportDirective",
        "scope": 7634,
        "sourceUnit": 7127,
        "src": "108:33:44",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7253,
              "name": "ERC677BridgeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7126,
              "src": "221:17:44",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC677BridgeToken_$7126",
                "typeString": "contract ERC677BridgeToken"
              }
            },
            "id": 7254,
            "nodeType": "InheritanceSpecifier",
            "src": "221:17:44"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7255,
              "name": "IdentityGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5734,
              "src": "240:13:44",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IdentityGuard_$5734",
                "typeString": "contract IdentityGuard"
              }
            },
            "id": 7256,
            "nodeType": "InheritanceSpecifier",
            "src": "240:13:44"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7257,
              "name": "FormulaHolder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3013,
              "src": "255:13:44",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FormulaHolder_$3013",
                "typeString": "contract FormulaHolder"
              }
            },
            "id": 7258,
            "nodeType": "InheritanceSpecifier",
            "src": "255:13:44"
          }
        ],
        "contractDependencies": [
          3013,
          5734,
          7061,
          7126,
          7247,
          10306,
          16680,
          16783,
          16947,
          17253,
          17685,
          17716,
          17904,
          17973
        ],
        "contractKind": "contract",
        "documentation": "@title The GoodDollar ERC677 token contract",
        "fullyImplemented": true,
        "id": 7633,
        "linearizedBaseContracts": [
          7633,
          3013,
          5734,
          7126,
          16680,
          7247,
          17904,
          16947,
          16783,
          10306,
          17253,
          17716,
          17685,
          17973,
          7061
        ],
        "name": "GoodDollar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 7260,
            "name": "feeRecipient",
            "nodeType": "VariableDeclaration",
            "scope": 7633,
            "src": "275:20:44",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7259,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "275:7:44",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7263,
            "name": "decimals",
            "nodeType": "VariableDeclaration",
            "scope": 7633,
            "src": "350:36:44",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 7261,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "350:7:44",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "32",
              "id": 7262,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "385:1:44",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2_by_1",
                "typeString": "int_const 2"
              },
              "value": "2"
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 7293,
              "nodeType": "Block",
              "src": "1061:45:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7289,
                      "name": "feeRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7260,
                      "src": "1071:12:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7290,
                      "name": "_feeRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7275,
                      "src": "1086:13:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1071:28:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7292,
                  "nodeType": "ExpressionStatement",
                  "src": "1071:28:44"
                }
              ]
            },
            "documentation": "@dev constructor\n@param _name The name of the token\n@param _symbol The symbol of the token\n@param _cap the cap of the token. no cap if 0\n@param _formula the fee formula contract\n@param _identity the identity contract\n@param _feeRecipient the address that receives transaction fees",
            "id": 7294,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7278,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7265,
                    "src": "970:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7279,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7267,
                    "src": "977:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7280,
                    "name": "_cap",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7269,
                    "src": "986:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 7281,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7277,
                  "name": "ERC677BridgeToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7126,
                  "src": "952:17:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ERC677BridgeToken_$7126_$",
                    "typeString": "type(contract ERC677BridgeToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "952:39:44"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7283,
                    "name": "_identity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7273,
                    "src": "1014:9:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$5447",
                      "typeString": "contract Identity"
                    }
                  }
                ],
                "id": 7284,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7282,
                  "name": "IdentityGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5734,
                  "src": "1000:13:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IdentityGuard_$5734_$",
                    "typeString": "type(contract IdentityGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1000:24:44"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7286,
                    "name": "_formula",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7271,
                    "src": "1047:8:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AbstractFees_$2581",
                      "typeString": "contract AbstractFees"
                    }
                  }
                ],
                "id": 7287,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7285,
                  "name": "FormulaHolder",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3013,
                  "src": "1033:13:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FormulaHolder_$3013_$",
                    "typeString": "type(contract FormulaHolder)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1033:23:44"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7265,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "760:19:44",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7264,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "760:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7267,
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "789:21:44",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7266,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "789:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7269,
                  "name": "_cap",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "820:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7268,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "820:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7271,
                  "name": "_formula",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "842:21:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AbstractFees_$2581",
                    "typeString": "contract AbstractFees"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7270,
                    "name": "AbstractFees",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2581,
                    "src": "842:12:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AbstractFees_$2581",
                      "typeString": "contract AbstractFees"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7273,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "873:18:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$5447",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7272,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5447,
                    "src": "873:8:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$5447",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7275,
                  "name": "_feeRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7294,
                  "src": "901:21:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "901:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "750:178:44"
            },
            "returnParameters": {
              "id": 7288,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1061:0:44"
            },
            "scope": 7633,
            "src": "739:367:44",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7318,
              "nodeType": "Block",
              "src": "1472:121:44",
              "statements": [
                {
                  "assignments": [
                    7304
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7304,
                      "name": "bruttoValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 7318,
                      "src": "1482:19:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7303,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1482:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7311,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7306,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18007,
                          "src": "1516:3:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1516:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7308,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7296,
                        "src": "1528:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7309,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7298,
                        "src": "1532:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7305,
                      "name": "processFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7632,
                      "src": "1504:11:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 7310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1504:34:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1482:56:44"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7314,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7296,
                        "src": "1570:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7315,
                        "name": "bruttoValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7304,
                        "src": "1574:11:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7312,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "1555:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17828,
                      "src": "1555:14:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 7316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1555:31:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7302,
                  "id": 7317,
                  "nodeType": "Return",
                  "src": "1548:38:44"
                }
              ]
            },
            "documentation": "@dev Processes fees from given value and sends\nremainder to given address\n@param to the address to be sent to\n@param value the value to be processed and then\ntransferred\n@return a boolean that indicates if the operation was successful",
            "id": 7319,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7296,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7319,
                  "src": "1423:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7295,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1423:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7298,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7319,
                  "src": "1435:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1435:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1422:27:44"
            },
            "returnParameters": {
              "id": 7302,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7301,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7319,
                  "src": "1466:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7300,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1466:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1465:6:44"
            },
            "scope": 7633,
            "src": "1405:188:44",
            "stateMutability": "nonpayable",
            "superFunction": 17828,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7334,
              "nodeType": "Block",
              "src": "1982:53:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7330,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7321,
                        "src": "2013:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7331,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7323,
                        "src": "2022:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7328,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "1999:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7329,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17867,
                      "src": "1999:13:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 7332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1999:29:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7327,
                  "id": 7333,
                  "nodeType": "Return",
                  "src": "1992:36:44"
                }
              ]
            },
            "documentation": "@dev Approve the passed address to spend the specified\namount of tokens on behalf of msg.sender\n@param spender The address which will spend the funds\n@param value The amount of tokens to be spent\n@return a boolean that indicates if the operation was successful",
            "id": 7335,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7321,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7335,
                  "src": "1928:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7320,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1928:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7323,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7335,
                  "src": "1945:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7322,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1945:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1927:32:44"
            },
            "returnParameters": {
              "id": 7327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7326,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7335,
                  "src": "1976:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7325,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1976:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1975:6:44"
            },
            "scope": 7633,
            "src": "1911:124:44",
            "stateMutability": "nonpayable",
            "superFunction": 17867,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7361,
              "nodeType": "Block",
              "src": "2484:125:44",
              "statements": [
                {
                  "assignments": [
                    7347
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7347,
                      "name": "bruttoValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 7361,
                      "src": "2494:19:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7346,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2494:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7353,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7349,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7337,
                        "src": "2528:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7350,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7339,
                        "src": "2534:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7351,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7341,
                        "src": "2538:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7348,
                      "name": "processFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7632,
                      "src": "2516:11:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 7352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2516:28:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2494:50:44"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7356,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7337,
                        "src": "2580:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7357,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7339,
                        "src": "2586:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7358,
                        "name": "bruttoValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7347,
                        "src": "2590:11:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7354,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "2561:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17849,
                      "src": "2561:18:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) returns (bool)"
                      }
                    },
                    "id": 7359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2561:41:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7345,
                  "id": 7360,
                  "nodeType": "Return",
                  "src": "2554:48:44"
                }
              ]
            },
            "documentation": "@dev Transfer tokens from one address to another\n@param from The address which you want to send tokens from\n@param to The address which you want to transfer to\n@param value the amount of tokens to be transferred\n@return a boolean that indicates if the operation was successful",
            "id": 7362,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7342,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7337,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 7362,
                  "src": "2400:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7336,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2400:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7339,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7362,
                  "src": "2422:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7338,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2422:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7341,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7362,
                  "src": "2442:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7340,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2442:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2390:71:44"
            },
            "returnParameters": {
              "id": 7345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7344,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7362,
                  "src": "2478:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7343,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2478:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2477:6:44"
            },
            "scope": 7633,
            "src": "2369:240:44",
            "stateMutability": "nonpayable",
            "superFunction": 17849,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7389,
              "nodeType": "Block",
              "src": "3043:135:44",
              "statements": [
                {
                  "assignments": [
                    7374
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7374,
                      "name": "bruttoValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 7389,
                      "src": "3053:19:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7373,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3053:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7381,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7376,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18007,
                          "src": "3087:3:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3087:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7378,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7364,
                        "src": "3099:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7379,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7366,
                        "src": "3103:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7375,
                      "name": "processFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7632,
                      "src": "3075:11:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 7380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3075:34:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3053:56:44"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7384,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7364,
                        "src": "3149:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7385,
                        "name": "bruttoValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7374,
                        "src": "3153:11:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7386,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7368,
                        "src": "3166:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7382,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "3126:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_transferAndCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7199,
                      "src": "3126:22:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,uint256,bytes memory) returns (bool)"
                      }
                    },
                    "id": 7387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3126:45:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7372,
                  "id": 7388,
                  "nodeType": "Return",
                  "src": "3119:52:44"
                }
              ]
            },
            "documentation": "@dev Processes transfer fees and calls ERC677Token transferAndCall function\n@param to address to transfer to\n@param value the amount to transfer\n@param data The data to pass to transferAndCall\n@return a bool indicating if transfer function succeeded",
            "id": 7390,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferAndCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7369,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7364,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7390,
                  "src": "2950:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7363,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2950:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7366,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7390,
                  "src": "2970:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7365,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2970:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7368,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 7390,
                  "src": "2993:19:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7367,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2993:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2940:78:44"
            },
            "returnParameters": {
              "id": 7372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7371,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7390,
                  "src": "3037:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7370,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3037:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3036:6:44"
            },
            "scope": 7633,
            "src": "2916:262:44",
            "stateMutability": "nonpayable",
            "superFunction": 7060,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7429,
              "nodeType": "Block",
              "src": "3551:184:44",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7404,
                      "name": "cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10250,
                      "src": "3565:3:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3571:1:44",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3565:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7419,
                  "nodeType": "IfStatement",
                  "src": "3561:115:44",
                  "trueBody": {
                    "id": 7418,
                    "nodeType": "Block",
                    "src": "3574:102:44",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 7411,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7394,
                                    "src": "3614:5:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 7408,
                                      "name": "totalSupply",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17282,
                                      "src": "3596:11:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view returns (uint256)"
                                      }
                                    },
                                    "id": 7409,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3596:13:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7410,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 17123,
                                  "src": "3596:17:44",
                                  "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": 7412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3596:24:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 7413,
                                "name": "cap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10250,
                                "src": "3624:3:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3596:31:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "43616e6e6f7420696e63726561736520737570706c79206265796f6e6420636170",
                              "id": 7415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3629:35:44",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0496a7c3b148a57cd5e6850cac361519e030f78a4931ffcd8cdc17574565f513",
                                "typeString": "literal_string \"Cannot increase supply beyond cap\""
                              },
                              "value": "Cannot increase supply beyond cap"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0496a7c3b148a57cd5e6850cac361519e030f78a4931ffcd8cdc17574565f513",
                                "typeString": "literal_string \"Cannot increase supply beyond cap\""
                              }
                            ],
                            "id": 7407,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              18010,
                              18011
                            ],
                            "referencedDeclaration": 18011,
                            "src": "3588:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3588:77:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7417,
                        "nodeType": "ExpressionStatement",
                        "src": "3588:77:44"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7423,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7392,
                        "src": "3697:2:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7424,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7394,
                        "src": "3701:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7420,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "3685:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7422,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17600,
                      "src": "3685:11:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3685:22:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7426,
                  "nodeType": "ExpressionStatement",
                  "src": "3685:22:44"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3724:4:44",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7403,
                  "id": 7428,
                  "nodeType": "Return",
                  "src": "3717:11:44"
                }
              ]
            },
            "documentation": "@dev Minting function\n@param to the address that will receive the minted tokens\n@param value the amount of tokens to mint\n@return a boolean that indicated if the operation was successful",
            "id": 7430,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7397,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7396,
                  "name": "onlyMinter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16613,
                  "src": "3479:10:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3479:10:44"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7399,
                    "name": "to",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7392,
                    "src": "3520:2:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7400,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7398,
                  "name": "requireNotBlacklisted",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5630,
                  "src": "3498:21:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3498:25:44"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7392,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7430,
                  "src": "3429:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7391,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3429:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7394,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7430,
                  "src": "3441:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3441:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3428:27:44"
            },
            "returnParameters": {
              "id": 7403,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7402,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7430,
                  "src": "3541:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7401,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3541:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3540:6:44"
            },
            "scope": 7633,
            "src": "3415:320:44",
            "stateMutability": "nonpayable",
            "superFunction": 10305,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7443,
              "nodeType": "Block",
              "src": "3913:34:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7440,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7432,
                        "src": "3934:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7437,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "3923:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17702,
                      "src": "3923:10:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3923:17:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7442,
                  "nodeType": "ExpressionStatement",
                  "src": "3923:17:44"
                }
              ]
            },
            "documentation": "@dev Burns a specific amount of tokens.\n@param value The amount of token to be burned.",
            "id": 7444,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7435,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7434,
                  "name": "onlyNotBlacklisted",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5615,
                  "src": "3894:18:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3894:18:44"
              }
            ],
            "name": "burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7432,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7444,
                  "src": "3872:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7431,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3872:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3871:15:44"
            },
            "returnParameters": {
              "id": 7436,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3913:0:44"
            },
            "scope": 7633,
            "src": "3858:89:44",
            "stateMutability": "nonpayable",
            "superFunction": 17702,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7463,
              "nodeType": "Block",
              "src": "4328:44:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7459,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7446,
                        "src": "4353:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7460,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7448,
                        "src": "4359:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7456,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "4338:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burnFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17715,
                      "src": "4338:14:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4338:27:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7462,
                  "nodeType": "ExpressionStatement",
                  "src": "4338:27:44"
                }
              ]
            },
            "documentation": "@dev Burns a specific amount of tokens from the target address and decrements allowance\n@param from address The address which you want to send tokens from\n@param value uint256 The amount of token to be burned",
            "id": 7464,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7451,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7450,
                  "name": "onlyNotBlacklisted",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5615,
                  "src": "4269:18:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4269:18:44"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7453,
                    "name": "from",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7446,
                    "src": "4318:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7454,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7452,
                  "name": "requireNotBlacklisted",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5630,
                  "src": "4296:21:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4296:27:44"
              }
            ],
            "name": "burnFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7446,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 7464,
                  "src": "4217:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7445,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4217:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7448,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7464,
                  "src": "4231:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7447,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4231:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4216:29:44"
            },
            "returnParameters": {
              "id": 7455,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4328:0:44"
            },
            "scope": 7633,
            "src": "4199:173:44",
            "stateMutability": "nonpayable",
            "superFunction": 17715,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7479,
              "nodeType": "Block",
              "src": "4781:68:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7475,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7466,
                        "src": "4822:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7476,
                        "name": "addedValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7468,
                        "src": "4831:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7473,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "4798:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "increaseAllowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17885,
                      "src": "4798:23:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 7477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4798:44:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7472,
                  "id": 7478,
                  "nodeType": "Return",
                  "src": "4791:51:44"
                }
              ]
            },
            "documentation": "@dev Increase the amount of tokens that an owner allows a spender\n@param spender The address which will spend the funds\n@param addedValue The amount of tokens to increase the allowance by\n@return a boolean that indicated if the operation was successful",
            "id": 7480,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "increaseAllowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7466,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7480,
                  "src": "4702:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7465,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4702:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7468,
                  "name": "addedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 7480,
                  "src": "4719:18:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7467,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4719:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4701:37:44"
            },
            "returnParameters": {
              "id": 7472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7471,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7480,
                  "src": "4771:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7470,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4771:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4770:6:44"
            },
            "scope": 7633,
            "src": "4675:174:44",
            "stateMutability": "nonpayable",
            "superFunction": 17885,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7495,
              "nodeType": "Block",
              "src": "5272:73:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7491,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7482,
                        "src": "5313:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7492,
                        "name": "subtractedValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7484,
                        "src": "5322:15:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7489,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18110,
                        "src": "5289:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodDollar_$7633",
                          "typeString": "contract super GoodDollar"
                        }
                      },
                      "id": 7490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "decreaseAllowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17903,
                      "src": "5289:23:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) returns (bool)"
                      }
                    },
                    "id": 7493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5289:49:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7488,
                  "id": 7494,
                  "nodeType": "Return",
                  "src": "5282:56:44"
                }
              ]
            },
            "documentation": "@dev Decrease the amount of tokens that an owner allowed to a spender\n@param spender The address which will spend the funds\n@param subtractedValue The amount of tokens to decrease the allowance by\n@return a boolean that indicated if the operation was successful",
            "id": 7496,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decreaseAllowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7482,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7496,
                  "src": "5188:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5188:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7484,
                  "name": "subtractedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 7496,
                  "src": "5205:23:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5205:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5187:42:44"
            },
            "returnParameters": {
              "id": 7488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7487,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7496,
                  "src": "5262:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5262:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5261:6:44"
            },
            "scope": 7633,
            "src": "5161:184:44",
            "stateMutability": "nonpayable",
            "superFunction": 17903,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7516,
              "nodeType": "Block",
              "src": "5559:72:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7507,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7498,
                        "src": "5594:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5609:1:44",
                            "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": 7508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5601:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7510,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5601:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7512,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5621:1:44",
                            "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": 7511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5613:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5613:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7505,
                        "name": "formula",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2976,
                        "src": "5576:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AbstractFees_$2581",
                          "typeString": "contract AbstractFees"
                        }
                      },
                      "id": 7506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getTxFees",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2580,
                      "src": "5576:17:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$_t_bool_$",
                        "typeString": "function (uint256,address,address) view external returns (uint256,bool)"
                      }
                    },
                    "id": 7514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5576:48:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                      "typeString": "tuple(uint256,bool)"
                    }
                  },
                  "functionReturnParameters": 7504,
                  "id": 7515,
                  "nodeType": "Return",
                  "src": "5569:55:44"
                }
              ]
            },
            "documentation": "@dev Gets the current transaction fees\n@return an uint256 that represents\nthe current transaction fees",
            "id": 7517,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFees",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7498,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7517,
                  "src": "5508:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7497,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5508:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5507:15:44"
            },
            "returnParameters": {
              "id": 7504,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7501,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7517,
                  "src": "5544:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7500,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5544:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7503,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7517,
                  "src": "5553:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7502,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5553:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5543:15:44"
            },
            "scope": 7633,
            "src": "5491:140:44",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7537,
              "nodeType": "Block",
              "src": "5910:67:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7532,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7519,
                        "src": "5945:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7533,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7521,
                        "src": "5952:6:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7534,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7523,
                        "src": "5960:9:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7530,
                        "name": "formula",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2976,
                        "src": "5927:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AbstractFees_$2581",
                          "typeString": "contract AbstractFees"
                        }
                      },
                      "id": 7531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getTxFees",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2580,
                      "src": "5927:17:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$_t_bool_$",
                        "typeString": "function (uint256,address,address) view external returns (uint256,bool)"
                      }
                    },
                    "id": 7535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5927:43:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                      "typeString": "tuple(uint256,bool)"
                    }
                  },
                  "functionReturnParameters": 7529,
                  "id": 7536,
                  "nodeType": "Return",
                  "src": "5920:50:44"
                }
              ]
            },
            "documentation": "@dev Gets the current transaction fees\n@return an uint256 that represents\nthe current transaction fees",
            "id": 7538,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFees",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7524,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7519,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5803:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7518,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5803:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7521,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5826:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7520,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5826:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7523,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5850:17:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7522,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5850:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5793:80:44"
            },
            "returnParameters": {
              "id": 7529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7526,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5895:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7525,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5895:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7528,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7538,
                  "src": "5904:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7527,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5904:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5894:15:44"
            },
            "scope": 7633,
            "src": "5777:200:44",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7549,
              "nodeType": "Block",
              "src": "6240:45:44",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7545,
                      "name": "feeRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7260,
                      "src": "6250:12:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7546,
                      "name": "_feeRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7540,
                      "src": "6265:13:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6250:28:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7548,
                  "nodeType": "ExpressionStatement",
                  "src": "6250:28:44"
                }
              ]
            },
            "documentation": "@dev Sets the address that receives the transactional fees.\ncan only be called by owner\n@param _feeRecipient The new address to receive transactional fees",
            "id": 7550,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7543,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7542,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 17187,
                  "src": "6230:9:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6230:9:44"
              }
            ],
            "name": "setFeeRecipient",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7541,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7540,
                  "name": "_feeRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7550,
                  "src": "6200:21:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7539,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6200:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6199:23:44"
            },
            "returnParameters": {
              "id": 7544,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6240:0:44"
            },
            "scope": 7633,
            "src": "6175:110:44",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7631,
              "nodeType": "Block",
              "src": "6710:608:44",
              "statements": [
                {
                  "assignments": [
                    7562,
                    7564
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7562,
                      "name": "txFees",
                      "nodeType": "VariableDeclaration",
                      "scope": 7631,
                      "src": "6721:14:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7561,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6721:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7564,
                      "name": "senderPays",
                      "nodeType": "VariableDeclaration",
                      "scope": 7631,
                      "src": "6737:15:44",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7563,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6737:4:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7570,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7566,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7556,
                        "src": "6764:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7567,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7552,
                        "src": "6771:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7568,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7554,
                        "src": "6780:9:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7565,
                      "name": "getFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7517,
                        7538
                      ],
                      "referencedDeclaration": 7538,
                      "src": "6756:7:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$_t_bool_$",
                        "typeString": "function (uint256,address,address) view returns (uint256,bool)"
                      }
                    },
                    "id": 7569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6756:34:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$",
                      "typeString": "tuple(uint256,bool)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6720:70:44"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7571,
                        "name": "txFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7562,
                        "src": "6804:6:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7572,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6813:1:44",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6804:10:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "6818:35:44",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7576,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18007,
                              "src": "6842:3:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6842:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7574,
                            "name": "identity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5582,
                            "src": "6819:8:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Identity_$5447",
                              "typeString": "contract Identity"
                            }
                          },
                          "id": 7575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isDAOContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5270,
                          "src": "6819:22:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 7578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6819:34:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6804:49:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7628,
                  "nodeType": "IfStatement",
                  "src": "6800:490:44",
                  "trueBody": {
                    "id": 7627,
                    "nodeType": "Block",
                    "src": "6855:435:44",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 7593,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 7584,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7582,
                                  "name": "senderPays",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7564,
                                  "src": "6894:10:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "66616c7365",
                                  "id": 7583,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6908:5:44",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "src": "6894:19:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7587,
                                      "name": "txFees",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7562,
                                      "src": "6927:6:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7585,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7556,
                                      "src": "6917:5:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7586,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 17123,
                                    "src": "6917:9:44",
                                    "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": 7588,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6917:17:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7590,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7552,
                                      "src": "6948:7:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 7589,
                                    "name": "balanceOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 17294,
                                    "src": "6938:9:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view returns (uint256)"
                                    }
                                  },
                                  "id": 7591,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6938:18:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6917:39:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "6894:62:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4e6f7420656e6f7567682062616c616e636520746f2070617920545820666565",
                              "id": 7594,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6974:34:44",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d8755bc09fb79e950a5e7d095cbea6768b94c4b9ef759e2c8e040327991591d6",
                                "typeString": "literal_string \"Not enough balance to pay TX fee\""
                              },
                              "value": "Not enough balance to pay TX fee"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d8755bc09fb79e950a5e7d095cbea6768b94c4b9ef759e2c8e040327991591d6",
                                "typeString": "literal_string \"Not enough balance to pay TX fee\""
                              }
                            ],
                            "id": 7581,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              18010,
                              18011
                            ],
                            "referencedDeclaration": 18011,
                            "src": "6869:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6869:153:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7596,
                        "nodeType": "ExpressionStatement",
                        "src": "6869:153:44"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7597,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7552,
                            "src": "7040:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7598,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18007,
                              "src": "7051:3:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7599,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "7051:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7040:21:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 7617,
                          "nodeType": "Block",
                          "src": "7138:82:44",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 7612,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7552,
                                    "src": "7175:7:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 7613,
                                    "name": "feeRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7260,
                                    "src": "7184:12:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 7614,
                                    "name": "txFees",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7562,
                                    "src": "7198:6:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7609,
                                    "name": "super",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18110,
                                    "src": "7156:5:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_super$_GoodDollar_$7633",
                                      "typeString": "contract super GoodDollar"
                                    }
                                  },
                                  "id": 7611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transferFrom",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 17849,
                                  "src": "7156:18:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,address,uint256) returns (bool)"
                                  }
                                },
                                "id": 7615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7156:49:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7616,
                              "nodeType": "ExpressionStatement",
                              "src": "7156:49:44"
                            }
                          ]
                        },
                        "id": 7618,
                        "nodeType": "IfStatement",
                        "src": "7036:184:44",
                        "trueBody": {
                          "id": 7608,
                          "nodeType": "Block",
                          "src": "7063:69:44",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 7604,
                                    "name": "feeRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7260,
                                    "src": "7096:12:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 7605,
                                    "name": "txFees",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7562,
                                    "src": "7110:6:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7601,
                                    "name": "super",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18110,
                                    "src": "7081:5:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_super$_GoodDollar_$7633",
                                      "typeString": "contract super GoodDollar"
                                    }
                                  },
                                  "id": 7603,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 17828,
                                  "src": "7081:14:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) returns (bool)"
                                  }
                                },
                                "id": 7606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7081:36:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7607,
                              "nodeType": "ExpressionStatement",
                              "src": "7081:36:44"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "id": 7619,
                            "name": "senderPays",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7564,
                            "src": "7241:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7623,
                                "name": "txFees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7562,
                                "src": "7272:6:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7621,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7556,
                                "src": "7262:5:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 17099,
                              "src": "7262:9:44",
                              "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": 7624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7262:17:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "7241:38:44",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 7620,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7556,
                            "src": "7254:5:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7560,
                        "id": 7626,
                        "nodeType": "Return",
                        "src": "7234:45:44"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7629,
                    "name": "value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7556,
                    "src": "7306:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7560,
                  "id": 7630,
                  "nodeType": "Return",
                  "src": "7299:12:44"
                }
              ]
            },
            "documentation": "@dev Sends transactional fees to feeRecipient address from given address\n@param account The account that sends the fees\n@param value The amount to subtract fees from\n@return an uint256 that represents the given value minus the transactional fees",
            "id": 7632,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "processFees",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7557,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7552,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 7632,
                  "src": "6611:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7551,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6611:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7554,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7632,
                  "src": "6636:17:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7553,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6636:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7556,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 7632,
                  "src": "6663:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7555,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6663:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6601:81:44"
            },
            "returnParameters": {
              "id": 7560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7559,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7632,
                  "src": "6701:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6701:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6700:9:44"
            },
            "scope": 7633,
            "src": "6581:737:44",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 7634,
        "src": "198:7122:44"
      }
    ],
    "src": "0:7321:44"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.3",
  "updatedAt": "2022-10-27T11:34:11.264Z",
  "devdoc": {
    "methods": {
      "allowance(address,address)": {
        "details": "Function to check the amount of tokens that an owner allowed to a spender.",
        "params": {
          "owner": "address The address which owns the funds.",
          "spender": "address The address which will spend the funds."
        },
        "return": "A uint256 specifying the amount of tokens still available for the spender."
      },
      "approve(address,uint256)": {
        "details": "Approve the passed address to spend the specified amount of tokens on behalf of msg.sender",
        "params": {
          "spender": "The address which will spend the funds",
          "value": "The amount of tokens to be spent"
        },
        "return": "a boolean that indicates if the operation was successful"
      },
      "balanceOf(address)": {
        "details": "Gets the balance of the specified address.",
        "params": {
          "owner": "The address to query the balance of."
        },
        "return": "An uint256 representing the amount owned by the passed address."
      },
      "burn(uint256)": {
        "details": "Burns a specific amount of tokens.",
        "params": {
          "value": "The amount of token to be burned."
        }
      },
      "burnFrom(address,uint256)": {
        "details": "Burns a specific amount of tokens from the target address and decrements allowance",
        "params": {
          "from": "address The address which you want to send tokens from",
          "value": "uint256 The amount of token to be burned"
        }
      },
      "constructor": {
        "details": "constructor",
        "params": {
          "_cap": "the cap of the token. no cap if 0",
          "_feeRecipient": "the address that receives transaction fees",
          "_formula": "the fee formula contract",
          "_identity": "the identity contract",
          "_name": "The name of the token",
          "_symbol": "The symbol of the token"
        }
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Decrease the amount of tokens that an owner allowed to a spender",
        "params": {
          "spender": "The address which will spend the funds",
          "subtractedValue": "The amount of tokens to decrease the allowance by"
        },
        "return": "a boolean that indicated if the operation was successful"
      },
      "getFees(uint256)": {
        "details": "Gets the current transaction fees",
        "return": "an uint256 that represents the current transaction fees"
      },
      "getFees(uint256,address,address)": {
        "details": "Gets the current transaction fees",
        "return": "an uint256 that represents the current transaction fees"
      },
      "increaseAllowance(address,uint256)": {
        "details": "Increase the amount of tokens that an owner allows a spender",
        "params": {
          "addedValue": "The amount of tokens to increase the allowance by",
          "spender": "The address which will spend the funds"
        },
        "return": "a boolean that indicated if the operation was successful"
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "mint(address,uint256)": {
        "details": "Minting function",
        "params": {
          "to": "the address that will receive the minted tokens",
          "value": "the amount of tokens to mint"
        },
        "return": "a boolean that indicated if the operation was successful"
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "pause()": {
        "details": "called by the owner to pause, triggers stopped state"
      },
      "paused()": {
        "return": "true if the contract is paused, false otherwise."
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract."
      },
      "setFeeRecipient(address)": {
        "details": "Sets the address that receives the transactional fees. can only be called by owner",
        "params": {
          "_feeRecipient": "The new address to receive transactional fees"
        }
      },
      "totalSupply()": {
        "details": "Total number of tokens in existence"
      },
      "transfer(address,uint256)": {
        "details": "Processes fees from given value and sends remainder to given address",
        "params": {
          "to": "the address to be sent to",
          "value": "the value to be processed and then transferred"
        },
        "return": "a boolean that indicates if the operation was successful"
      },
      "transferAndCall(address,uint256,bytes)": {
        "details": "Processes transfer fees and calls ERC677Token transferAndCall function",
        "params": {
          "data": "The data to pass to transferAndCall",
          "to": "address to transfer to",
          "value": "the amount to transfer"
        },
        "return": "a bool indicating if transfer function succeeded"
      },
      "transferFrom(address,address,uint256)": {
        "details": "Transfer tokens from one address to another",
        "params": {
          "from": "The address which you want to send tokens from",
          "to": "The address which you want to transfer to",
          "value": "the amount of tokens to be transferred"
        },
        "return": "a boolean that indicates if the operation was successful"
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      },
      "unpause()": {
        "details": "called by the owner to unpause, returns to normal state"
      }
    },
    "title": "The GoodDollar ERC677 token contract"
  },
  "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."
      }
    }
  }
}