{
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "sourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "submitable",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "returnAbiParametersArray",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isInternal",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "needsSender",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "position",
          "type": "uint256"
        }
      ],
      "name": "addFunctionality",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "sourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "submitable",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "returnAbiParametersArray",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isInternal",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "needsSender",
          "type": "bool"
        }
      ],
      "name": "addFunctionality",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "clearCallingContext",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "functionalitiesToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l",
          "type": "uint256"
        }
      ],
      "name": "functionalitiesToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "functionsJSONArray",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "functionalityNames",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l",
          "type": "uint256"
        }
      ],
      "name": "functionalityNames",
      "outputs": [
        {
          "internalType": "string",
          "name": "functionsJSONArray",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "functionalityToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getFunctionalitiesAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "getFunctionalityData",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getProxy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "hasFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getMinimumBlockNumberSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getMinimumBlockNumberFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getEmergencyMinimumBlockNumberSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getEmergencyMinimumBlockNumberFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getEmergencySurveyStakingSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getEmergencySurveyStakingFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "checkVoteResultSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "checkVoteResultFunctionalityAddress",
          "type": "address"
        }
      ],
      "name": "init",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "functionality",
          "type": "address"
        }
      ],
      "name": "isAuthorizedFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "functionality",
          "type": "address"
        }
      ],
      "name": "isValidFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint8",
          "name": "submitable",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "preConditionCheck",
      "outputs": [
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "removeFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "removed",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "position",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        }
      ],
      "name": "setCallingContext",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "setProxy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "proposalAddress",
          "type": "address"
        }
      ],
      "name": "setupFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "evm": {
    "bytecode": {
      "linkReferences": {},
      "object": "",
      "opcodes": "",
      "sourceMap": ""
    },
    "deployedBytecode": {
      "linkReferences": {},
      "object": "",
      "opcodes": "",
      "sourceMap": ""
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"sourceLocation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"location\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"submitable\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"returnAbiParametersArray\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"isInternal\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"needsSender\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"addFunctionality\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"sourceLocation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"location\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"submitable\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"returnAbiParametersArray\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"isInternal\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"needsSender\",\"type\":\"bool\"}],\"name\":\"addFunctionality\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"clearCallingContext\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"functionalitiesToJSON\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l\",\"type\":\"uint256\"}],\"name\":\"functionalitiesToJSON\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"functionsJSONArray\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"functionalityNames\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l\",\"type\":\"uint256\"}],\"name\":\"functionalityNames\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"functionsJSONArray\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"}],\"name\":\"functionalityToJSON\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getFunctionalitiesAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"}],\"name\":\"getFunctionalityData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"}],\"name\":\"hasFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sourceLocation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"getMinimumBlockNumberSourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"getMinimumBlockNumberFunctionalityAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"getEmergencyMinimumBlockNumberSourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"getEmergencyMinimumBlockNumberFunctionalityAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"getEmergencySurveyStakingSourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"getEmergencySurveyStakingFunctionalityAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"checkVoteResultSourceLocationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"checkVoteResultFunctionalityAddress\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"functionality\",\"type\":\"address\"}],\"name\":\"isAuthorizedFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"functionality\",\"type\":\"address\"}],\"name\":\"isValidFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"submitable\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"preConditionCheck\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"location\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"codeName\",\"type\":\"string\"}],\"name\":\"removeFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"removed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"location\",\"type\":\"address\"}],\"name\":\"setCallingContext\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"setProxy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposalAddress\",\"type\":\"address\"}],\"name\":\"setupFunctionality\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IMVDFunctionalitiesManager.sol\":\"IMVDFunctionalitiesManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IMVDFunctionalitiesManager.sol\":{\"keccak256\":\"0x3112d9cdb53fb794164ae5b52a4bb2a0e52e6e48158e5fd5e1b1ccf158049afa\",\"urls\":[\"bzz-raw://dca7745fb0c3b8f5f1587fe7fc03c063b9ee0d2f6e426a8e20f1a89b4bb1c1b5\",\"dweb:/ipfs/QmbEfqvZ8njufhk9XUY69AkRKJhYSGzzP4A4mNNan2RF4J\"]}},\"version\":1}",
  "interface": [
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "sourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "submitable",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "returnAbiParametersArray",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isInternal",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "needsSender",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "position",
          "type": "uint256"
        }
      ],
      "name": "addFunctionality",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "sourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "submitable",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "returnAbiParametersArray",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isInternal",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "needsSender",
          "type": "bool"
        }
      ],
      "name": "addFunctionality",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "clearCallingContext",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "functionalitiesToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l",
          "type": "uint256"
        }
      ],
      "name": "functionalitiesToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "functionsJSONArray",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "functionalityNames",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l",
          "type": "uint256"
        }
      ],
      "name": "functionalityNames",
      "outputs": [
        {
          "internalType": "string",
          "name": "functionsJSONArray",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "functionalityToJSON",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getFunctionalitiesAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "getFunctionalityData",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getProxy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "hasFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sourceLocation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getMinimumBlockNumberSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getMinimumBlockNumberFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getEmergencyMinimumBlockNumberSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getEmergencyMinimumBlockNumberFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "getEmergencySurveyStakingSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "getEmergencySurveyStakingFunctionalityAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "checkVoteResultSourceLocationId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "checkVoteResultFunctionalityAddress",
          "type": "address"
        }
      ],
      "name": "init",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "functionality",
          "type": "address"
        }
      ],
      "name": "isAuthorizedFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "functionality",
          "type": "address"
        }
      ],
      "name": "isValidFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint8",
          "name": "submitable",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "preConditionCheck",
      "outputs": [
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "codeName",
          "type": "string"
        }
      ],
      "name": "removeFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "removed",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "position",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "location",
          "type": "address"
        }
      ],
      "name": "setCallingContext",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "setProxy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "proposalAddress",
          "type": "address"
        }
      ],
      "name": "setupFunctionality",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": ""
}