{
  "contractName": "PermissioningRegistry",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "permissions",
      "outputs": [
        {
          "name": "admin",
          "type": "address"
        },
        {
          "name": "exposed",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "document",
          "type": "bytes32"
        }
      ],
      "name": "NewAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "document",
          "type": "bytes32"
        }
      ],
      "name": "Permission",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        },
        {
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "setAdmin",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        },
        {
          "name": "_users",
          "type": "address[]"
        }
      ],
      "name": "setUsers",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        },
        {
          "name": "_exposed",
          "type": "bool"
        }
      ],
      "name": "setExposed",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        },
        {
          "name": "newUser",
          "type": "address"
        }
      ],
      "name": "addUser",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        }
      ],
      "name": "removePermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        },
        {
          "name": "_users",
          "type": "address[]"
        }
      ],
      "name": "permission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "user",
          "type": "address"
        },
        {
          "name": "document",
          "type": "bytes32"
        }
      ],
      "name": "checkPermissions",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        }
      ],
      "name": "getAdmin",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        }
      ],
      "name": "getUsers",
      "outputs": [
        {
          "name": "",
          "type": "address[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "document",
          "type": "bytes32"
        }
      ],
      "name": "isExposed",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5060008054600160a060020a0319163317808255604051600160a060020a039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a361008c7f01ffc9a7000000000000000000000000000000000000000000000000000000006401000000006100f5810204565b6100be7fb36a9a7c000000000000000000000000000000000000000000000000000000006401000000006100f5810204565b6100f07f813ae5ed000000000000000000000000000000000000000000000000000000006401000000006100f5810204565b610164565b7fffffffff00000000000000000000000000000000000000000000000000000000808216141561012457600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152600160208190526040909120805460ff19169091179055565b610d05806101736000396000f3006080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146100ea5780630f039de8146101355780634ccea5261461015957806365923cd1146101c1578063715018a6146101d95780637ffb5473146101f057806380c6e70a146102085780638170d8391461023c5780638da5cb5b146102605780638f32d59b14610275578063aa9c54261461028a578063b36a9a7c146102ae578063b4d2388f146102d2578063c29297471461030d578063ee4024db1461032a578063f2fde38b1461034e575b600080fd5b3480156100f657600080fd5b506101217bffffffffffffffffffffffffffffffffffffffffffffffffffffffff196004351661036f565b604080519115158252519081900360200190f35b34801561014157600080fd5b506101216004803590602480359081019101356103a3565b34801561016557600080fd5b5061017160043561049b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101ad578181015183820152602001610195565b505050509050019250505060405180910390f35b3480156101cd57600080fd5b50610121600435610507565b3480156101e557600080fd5b506101ee6105c6565b005b3480156101fc57600080fd5b50610121600435610623565b34801561021457600080fd5b50610220600435610653565b60408051600160a060020a039092168252519081900360200190f35b34801561024857600080fd5b50610121600480359060248035908101910135610671565b34801561026c57600080fd5b50610220610713565b34801561028157600080fd5b50610121610723565b34801561029657600080fd5b50610121600435600160a060020a0360243516610734565b3480156102ba57600080fd5b50610121600160a060020a03600435166024356107f1565b3480156102de57600080fd5b506102ea6004356108b5565b60408051600160a060020a03909316835290151560208301528051918290030190f35b34801561031957600080fd5b5061012160043560243515156108f0565b34801561033657600080fd5b50610121600435600160a060020a03602435166109bb565b34801561035a57600080fd5b506101ee600160a060020a0360043516610ada565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526001602052604090205460ff1690565b600083815260026020526040812060010154600160a060020a031615806103ce57506103ce84610af9565b151561044a576040805160e560020a62461bcd02815260206004820152603460248201527f596f75206861766520746f2062652061646d696e206f72206f776e657220746f60448201527f206368616e6765207065726d697373696f6e732e000000000000000000000000606482015290519081900360840190fd5b6000848152600260205260409020600181018054600160a060020a03191633179055610477908484610bba565b506040518490600080516020610c9a83398151915290600090a25060019392505050565b6000818152600260209081526040918290208054835181840281018401909452808452606093928301828280156104fb57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116104dd575b50505050509050919050565b60008161051381610af9565b151561056b576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b6000838152600260205260408120906105848282610c1d565b50600101805474ffffffffffffffffffffffffffffffffffffffffff191690556040518390600080516020610c9a83398151915290600090a250600192915050565b6105ce610723565b15156105d957600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054600160a060020a0319169055565b60009081526002602052604090206001015474010000000000000000000000000000000000000000900460ff1690565b600090815260026020526040902060010154600160a060020a031690565b60008361067d81610af9565b15156106d5576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b60008581526002602052604090206106ee908585610bba565b506040518590600080516020610c9a83398151915290600090a2506001949350505050565b600054600160a060020a03165b90565b600054600160a060020a0316331490565b60008261074081610af9565b1515610798576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b600084815260026020908152604080832080546001810182559084529183209091018054600160a060020a031916600160a060020a038716179055518591600080516020610c9a83398151915291a25060019392505050565b60008060006107ff84610b2a565b151561080e57600092506108ad565b60008481526002602052604090206001015474010000000000000000000000000000000000000000900460ff161561084957600192506108ad565b50506000828152600260205260408120905b81548110156108a85784600160a060020a0316828281548110151561087c57fe5b600091825260209091200154600160a060020a031614156108a057600192506108ad565b60010161085b565b600092505b505092915050565b600260205260009081526040902060010154600160a060020a0381169074010000000000000000000000000000000000000000900460ff1682565b6000826108fc81610af9565b1515610954576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b600084815260026020526040808220600101805474ff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000087151502179055518591600080516020610c9a83398151915291a25060019392505050565b6000826109c781610af9565b1515610a1f576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b600160a060020a0383161515610a7f576040805160e560020a62461bcd02815260206004820181905260248201527f4e65772061646d696e20616464726573732063616e6e6f74206265203078302e604482015290519081900360640190fd5b6000848152600260205260408082206001018054600160a060020a031916600160a060020a0387161790555185917f9c38d9bf66f47815dd90b1c5c80b0138365b0f232c260374041f97909b70146591a25060019392505050565b610ae2610723565b1515610aed57600080fd5b610af681610b4a565b50565b600081815260026020526040812060010154600160a060020a0316331480610b245750610b24610723565b92915050565b600090815260026020526040902060010154600160a060020a0316151590565b600160a060020a0381161515610b5f57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b828054828255906000526020600020908101928215610c0d579160200282015b82811115610c0d578154600160a060020a031916600160a060020a03843516178255602090920191600190910190610bda565b50610c19929150610c3b565b5090565b5080546000825590600052602060002090810190610af69190610c5f565b61072091905b80821115610c19578054600160a060020a0319168155600101610c41565b61072091905b80821115610c195760008155600101610c655600696e206f72206f776e65722e00000000000000000000000000000000000000001cc9fc44b401f3c62bc063fa96b96115b72c6c810c4cb13745eeb6e173d5ffe543616c6c65722068617320746f206265207468652063757272656e742061646da165627a7a72305820563cf8e41019a244502757d3edf51b14c66a238620d3e26d36787fb0cab94d2e0029",
  "deployedBytecode": "0x6080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146100ea5780630f039de8146101355780634ccea5261461015957806365923cd1146101c1578063715018a6146101d95780637ffb5473146101f057806380c6e70a146102085780638170d8391461023c5780638da5cb5b146102605780638f32d59b14610275578063aa9c54261461028a578063b36a9a7c146102ae578063b4d2388f146102d2578063c29297471461030d578063ee4024db1461032a578063f2fde38b1461034e575b600080fd5b3480156100f657600080fd5b506101217bffffffffffffffffffffffffffffffffffffffffffffffffffffffff196004351661036f565b604080519115158252519081900360200190f35b34801561014157600080fd5b506101216004803590602480359081019101356103a3565b34801561016557600080fd5b5061017160043561049b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101ad578181015183820152602001610195565b505050509050019250505060405180910390f35b3480156101cd57600080fd5b50610121600435610507565b3480156101e557600080fd5b506101ee6105c6565b005b3480156101fc57600080fd5b50610121600435610623565b34801561021457600080fd5b50610220600435610653565b60408051600160a060020a039092168252519081900360200190f35b34801561024857600080fd5b50610121600480359060248035908101910135610671565b34801561026c57600080fd5b50610220610713565b34801561028157600080fd5b50610121610723565b34801561029657600080fd5b50610121600435600160a060020a0360243516610734565b3480156102ba57600080fd5b50610121600160a060020a03600435166024356107f1565b3480156102de57600080fd5b506102ea6004356108b5565b60408051600160a060020a03909316835290151560208301528051918290030190f35b34801561031957600080fd5b5061012160043560243515156108f0565b34801561033657600080fd5b50610121600435600160a060020a03602435166109bb565b34801561035a57600080fd5b506101ee600160a060020a0360043516610ada565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526001602052604090205460ff1690565b600083815260026020526040812060010154600160a060020a031615806103ce57506103ce84610af9565b151561044a576040805160e560020a62461bcd02815260206004820152603460248201527f596f75206861766520746f2062652061646d696e206f72206f776e657220746f60448201527f206368616e6765207065726d697373696f6e732e000000000000000000000000606482015290519081900360840190fd5b6000848152600260205260409020600181018054600160a060020a03191633179055610477908484610bba565b506040518490600080516020610c9a83398151915290600090a25060019392505050565b6000818152600260209081526040918290208054835181840281018401909452808452606093928301828280156104fb57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116104dd575b50505050509050919050565b60008161051381610af9565b151561056b576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b6000838152600260205260408120906105848282610c1d565b50600101805474ffffffffffffffffffffffffffffffffffffffffff191690556040518390600080516020610c9a83398151915290600090a250600192915050565b6105ce610723565b15156105d957600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054600160a060020a0319169055565b60009081526002602052604090206001015474010000000000000000000000000000000000000000900460ff1690565b600090815260026020526040902060010154600160a060020a031690565b60008361067d81610af9565b15156106d5576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b60008581526002602052604090206106ee908585610bba565b506040518590600080516020610c9a83398151915290600090a2506001949350505050565b600054600160a060020a03165b90565b600054600160a060020a0316331490565b60008261074081610af9565b1515610798576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b600084815260026020908152604080832080546001810182559084529183209091018054600160a060020a031916600160a060020a038716179055518591600080516020610c9a83398151915291a25060019392505050565b60008060006107ff84610b2a565b151561080e57600092506108ad565b60008481526002602052604090206001015474010000000000000000000000000000000000000000900460ff161561084957600192506108ad565b50506000828152600260205260408120905b81548110156108a85784600160a060020a0316828281548110151561087c57fe5b600091825260209091200154600160a060020a031614156108a057600192506108ad565b60010161085b565b600092505b505092915050565b600260205260009081526040902060010154600160a060020a0381169074010000000000000000000000000000000000000000900460ff1682565b6000826108fc81610af9565b1515610954576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b600084815260026020526040808220600101805474ff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000087151502179055518591600080516020610c9a83398151915291a25060019392505050565b6000826109c781610af9565b1515610a1f576040805160e560020a62461bcd02815260206004820152602c6024820152600080516020610cba8339815191526044820152600080516020610c7a833981519152606482015290519081900360840190fd5b600160a060020a0383161515610a7f576040805160e560020a62461bcd02815260206004820181905260248201527f4e65772061646d696e20616464726573732063616e6e6f74206265203078302e604482015290519081900360640190fd5b6000848152600260205260408082206001018054600160a060020a031916600160a060020a0387161790555185917f9c38d9bf66f47815dd90b1c5c80b0138365b0f232c260374041f97909b70146591a25060019392505050565b610ae2610723565b1515610aed57600080fd5b610af681610b4a565b50565b600081815260026020526040812060010154600160a060020a0316331480610b245750610b24610723565b92915050565b600090815260026020526040902060010154600160a060020a0316151590565b600160a060020a0381161515610b5f57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b828054828255906000526020600020908101928215610c0d579160200282015b82811115610c0d578154600160a060020a031916600160a060020a03843516178255602090920191600190910190610bda565b50610c19929150610c3b565b5090565b5080546000825590600052602060002090810190610af69190610c5f565b61072091905b80821115610c19578054600160a060020a0319168155600101610c41565b61072091905b80821115610c195760008155600101610c655600696e206f72206f776e65722e00000000000000000000000000000000000000001cc9fc44b401f3c62bc063fa96b96115b72c6c810c4cb13745eeb6e173d5ffe543616c6c65722068617320746f206265207468652063757272656e742061646da165627a7a72305820563cf8e41019a244502757d3edf51b14c66a238620d3e26d36787fb0cab94d2e0029",
  "sourceMap": "212:3504:0:-;;;709:314;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;509:6:12;:19;;-1:-1:-1;;;;;;509:19:12;518:10;509:19;;;;539:40;;-1:-1:-1;;;;;572:6:12;;;;;509;539:40;;509:6;;539:40;612:39:10;631:19;612:18;;;;:39;:::i;:::-;767:50:0;786:30;767:18;;;;:50;:::i;:::-;827:189;859:147;827:18;;;;:189;:::i;:::-;212:3504;;951:154:10;1028:25;;;;;;1020:34;;;;;;1060:33;;;;;;1096:4;1060:33;;;;;;;;:40;;-1:-1:-1;;1060:40:10;;;;;;951:154::o;212:3504:0:-;;;;;;;",
  "deployedSourceMap": "212:3504:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;739:141:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;739:141:10;-1:-1:-1;;739:141:10;;;;;;;;;;;;;;;;;;;;;;;2164:411:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2164:411:0;;;;;;;;;;;;;;;;3177:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3177:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;3177:119:0;;;;;;;;;;;;;;;;;1968:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1968:190:0;;;;;1273:127:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1273:127:12;;;;;;3302:117:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3302:117:0;;;;;3054;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3054:117:0;;;;;;;;;-1:-1:-1;;;;;3054:117:0;;;;;;;;;;;;;;1320:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1320:208:0;;;;;;;;;;;;;;;;639:70:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;639:70:12;;;;926:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;926:83:12;;;;1751:211:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1751:211:0;;;-1:-1:-1;;;;;1751:211:0;;;;;2581:467;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2581:467:0;-1:-1:-1;;;;;2581:467:0;;;;;;;406:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;406:54:0;;;;;;;;;-1:-1:-1;;;;;406:54:0;;;;;;;;;;;;;;;;;;;;;1534:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1534:211:0;;;;;;;;;1029:285;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1029:285:0;;;-1:-1:-1;;;;;1029:285:0;;;;;1561:101:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1561:101:12;-1:-1:-1;;;;;1561:101:12;;;;;739:141:10;-1:-1:-1;;842:33:10;821:4;842:33;;;:20;:33;;;;;;;;;739:141::o;2164:411:0:-;2238:4;2275:21;;;:11;:21;;;;;:27;;;-1:-1:-1;;;;;2275:27:0;:41;;:63;;;2320:18;2329:8;2320;:18::i;:::-;2254:162;;;;;;;-1:-1:-1;;;;;2254:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2426:21;;;;:11;:21;;;;;:27;;;:40;;-1:-1:-1;;;;;;2426:40:0;2456:10;2426:40;;;2476:36;;2506:6;;2476:36;:::i;:::-;-1:-1:-1;2527:20:0;;2538:8;;-1:-1:-1;;;;;;;;;;;2527:20:0;;;;-1:-1:-1;2564:4:0;2164:411;;;;;:::o;3177:119::-;3262:21;;;;:11;:21;;;;;;;;;3255:34;;;;;;;;;;;;;;;;;3234:9;;3255:34;;;3262:21;3255:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3255:34:0;;;;;;;;;;;;;;;;;;;;;;;3177:119;;;:::o;1968:190::-;2051:4;2032:8;618:18;627:8;618;:18::i;:::-;610:75;;;;;;;-1:-1:-1;;;;;610:75:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;;;;;;;;;;;;2074:21;;;;:11;:21;;;;;;2067:28;2074:21;;2067:28;:::i;:::-;-1:-1:-1;2067:28:0;;;;-1:-1:-1;;2067:28:0;;;2110:20;;2121:8;;-1:-1:-1;;;;;;;;;;;2110:20:0;2067:28;;2110:20;-1:-1:-1;2147:4:0;;1968:190;-1:-1:-1;;1968:190:0:o;1273:127:12:-;824:9;:7;:9::i;:::-;816:18;;;;;;;;1367:1;1351:6;;1330:40;;-1:-1:-1;;;;;1351:6:12;;;;1330:40;;1367:1;;1330:40;1393:1;1376:19;;-1:-1:-1;;;;;;1376:19:12;;;1273:127::o;3302:117:0:-;3360:4;3383:21;;;:11;:21;;;;;:29;;;;;;;;;3302:117::o;3054:::-;3111:7;3137:21;;;:11;:21;;;;;:27;;;-1:-1:-1;;;;;3137:27:0;;3054:117::o;1320:208::-;1413:4;1394:8;618:18;627:8;618;:18::i;:::-;610:75;;;;;;;-1:-1:-1;;;;;610:75:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;;;;;;;;;;;;1429:21;;;;:11;:21;;;;;:36;;1459:6;;1429:36;:::i;:::-;-1:-1:-1;1480:20:0;;1491:8;;-1:-1:-1;;;;;;;;;;;1480:20:0;;;;-1:-1:-1;1517:4:0;;1320:208;-1:-1:-1;;;;1320:208:0:o;639:70:12:-;676:7;698:6;-1:-1:-1;;;;;698:6:12;639:70;;:::o;926:83::-;965:4;998:6;-1:-1:-1;;;;;998:6:12;984:10;:20;;926:83::o;1751:211:0:-;1842:4;1823:8;618:18;627:8;618;:18::i;:::-;610:75;;;;;;;-1:-1:-1;;;;;610:75:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;;;;;;;;;;;;1858:21;;;;:11;:21;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;1858:41:0;;;;;;;;;;;-1:-1:-1;;;;;;1858:41:0;-1:-1:-1;;;;;1858:41:0;;;;;1914:20;1858:21;;-1:-1:-1;;;;;;;;;;;1914:20:0;;-1:-1:-1;1951:4:0;;1751:211;-1:-1:-1;;;1751:211:0:o;2581:467::-;2660:4;2843:23;2911:6;2681:24;2696:8;2681:14;:24::i;:::-;2680:25;2676:68;;;2728:5;2721:12;;;;2676:68;2766:21;;;;:11;:21;;;;;:29;;;;;;;;2762:71;;;2818:4;2811:11;;;;2762:71;-1:-1:-1;;2869:21:0;;;;:11;:21;;;;;;2906:114;2927:12;;2923:16;;2906:114;;;2976:4;-1:-1:-1;;;;;2964:16:0;:5;2970:1;2964:8;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2964:8:0;:16;2960:49;;;3005:4;2998:11;;;;2960:49;2941:3;;2906:114;;;3036:5;3029:12;;2581:467;;;;;;;:::o;406:54::-;;;;;;;;;;;;;;-1:-1:-1;;;;;406:54:0;;;;;;;;;:::o;1534:211::-;1626:4;1607:8;618:18;627:8;618;:18::i;:::-;610:75;;;;;;;-1:-1:-1;;;;;610:75:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;;;;;;;;;;;;1642:21;;;;:11;:21;;;;;;:29;;:40;;-1:-1:-1;;1642:40:0;;;;;;;;;1697:20;1642:21;;-1:-1:-1;;;;;;;;;;;1697:20:0;;-1:-1:-1;1734:4:0;;1534:211;-1:-1:-1;;;1534:211:0:o;1029:285::-;1122:4;1103:8;618:18;627:8;618;:18::i;:::-;610:75;;;;;;;-1:-1:-1;;;;;610:75:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;-1:-1:-1;;;;;;;;;;;610:75:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;1146:22:0;;;;1138:67;;;;;-1:-1:-1;;;;;1138:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1215:21;;;;:11;:21;;;;;;:27;;:38;;-1:-1:-1;;;;;;1215:38:0;-1:-1:-1;;;;;1215:38:0;;;;;1268:18;1215:21;;1268:18;;;-1:-1:-1;1303:4:0;;1029:285;-1:-1:-1;;;1029:285:0:o;1561:101:12:-;824:9;:7;:9::i;:::-;816:18;;;;;;;;1629:28;1648:8;1629:18;:28::i;:::-;1561:101;:::o;3425:145:0:-;3484:4;3508:21;;;:11;:21;;;;;:27;;;-1:-1:-1;;;;;3508:27:0;3539:10;3508:41;;:54;;;3553:9;:7;:9::i;:::-;3500:63;3425:145;-1:-1:-1;;3425:145:0:o;3576:138::-;3641:4;3665:21;;;:11;:21;;;;;:27;;;-1:-1:-1;;;;;3665:27:0;:41;;;3576:138::o;1796:169:12:-;-1:-1:-1;;;;;1865:22:12;;;;1857:31;;;;;;1920:6;;;1899:38;;-1:-1:-1;;;;;1899:38:12;;;;1920:6;;;1899:38;;;1943:6;:17;;-1:-1:-1;;;;;;1943:17:12;-1:-1:-1;;;;;1943:17:12;;;;;;;;;;1796:169::o;212:3504:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;212:3504:0;-1:-1:-1;;;;;212:3504:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;212:3504:0;;;-1:-1:-1;212:3504:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;212:3504:0;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./interfaces/ISecretStorePermissioning.sol\";\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"openzeppelin-solidity/contracts/introspection/ERC165.sol\";\n\n\ncontract PermissioningRegistry is ISecretStorePermissioning, Ownable, ERC165 {\n\n    struct PermissionEntry {\n        address[] users;\n        address admin;\n        bool exposed;\n    }\n    \n    mapping(bytes32 => PermissionEntry) public permissions;\n\n    event NewAdmin(bytes32 indexed document);\n    event Permission(bytes32 indexed document);\n\n    modifier onlyAdmins(bytes32 document) {\n        require(_isAdmin(document), \"Caller has to be the current admin or owner.\");\n        _;\n    }\n\n    constructor() public {\n        // ERC 165 support\n        _registerInterface(this.checkPermissions.selector);\n        _registerInterface(\n            this.owner.selector\n            ^ this.isOwner.selector\n            ^ this.renounceOwnership.selector\n            ^ this.transferOwnership.selector\n        );\n    }\n\n    function setAdmin(bytes32 document, address newAdmin) external onlyAdmins(document) returns (bool) {\n        require(newAdmin != address(0), \"New admin address cannot be 0x0.\");\n        permissions[document].admin = newAdmin;\n        emit NewAdmin(document);\n        return true;\n    }\n\n    function setUsers(bytes32 document, address[] _users) external onlyAdmins(document) returns (bool) {\n        permissions[document].users = _users;\n        emit Permission(document);\n        return true;\n    }\n\n    function setExposed(bytes32 document, bool _exposed) external onlyAdmins(document) returns (bool) {\n        permissions[document].exposed = _exposed;\n        emit Permission(document);\n        return true;\n    }\n\n    function addUser(bytes32 document, address newUser) external onlyAdmins(document) returns (bool) {\n        permissions[document].users.push(newUser);\n        emit Permission(document);\n        return true;\n    }\n\n    function removePermission(bytes32 document) external onlyAdmins(document) returns (bool) {\n        delete permissions[document];\n        emit Permission(document);\n        return true;\n    }\n\n    function permission(bytes32 document, address[] _users) external returns (bool) {\n        require(\n            permissions[document].admin == address(0) || _isAdmin(document),\n            \"You have to be admin or owner to change permissions.\"\n        );\n        permissions[document].admin = msg.sender;\n        permissions[document].users = _users;\n        emit Permission(document);\n        return true;\n    }\n\n    function checkPermissions(address user, bytes32 document) public view returns (bool) {\n        if (!_isInitialized(document)) {\n            return false;\n        }\n        \n        if (permissions[document].exposed) {\n            return true;\n        }\n\n        address[] storage users = permissions[document].users;\n        for (uint i = 0; i < users.length; i++) {\n            if (users[i] == user)\n                return true;\n        }\n        return false;\n    }\n\n    function getAdmin(bytes32 document) public view returns (address) {\n        return permissions[document].admin;\n    }\n\n    function getUsers(bytes32 document) public view returns (address[]) {\n        return permissions[document].users;\n    }\n\n    function isExposed(bytes32 document) public view returns (bool) {\n        return permissions[document].exposed;\n    }\n\n    function _isAdmin(bytes32 document) internal view returns (bool) {\n        return (permissions[document].admin == msg.sender || isOwner());\n    }\n\n    function _isInitialized(bytes32 document) internal view returns (bool) {\n        return (permissions[document].admin != address(0));\n    }\n}",
  "sourcePath": "/home/aznagy/work/secretstore/secretstore-contracts/contracts/PermissioningRegistry.sol",
  "ast": {
    "absolutePath": "/home/aznagy/work/secretstore/secretstore-contracts/contracts/PermissioningRegistry.sol",
    "exportedSymbols": {
      "PermissioningRegistry": [
        393
      ]
    },
    "id": 394,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:0"
      },
      {
        "absolutePath": "/home/aznagy/work/secretstore/secretstore-contracts/contracts/interfaces/ISecretStorePermissioning.sol",
        "file": "./interfaces/ISecretStorePermissioning.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 394,
        "sourceUnit": 406,
        "src": "26:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 394,
        "sourceUnit": 4824,
        "src": "79:63:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/introspection/ERC165.sol",
        "file": "openzeppelin-solidity/contracts/introspection/ERC165.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 394,
        "sourceUnit": 4705,
        "src": "143:66:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5,
              "name": "ISecretStorePermissioning",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 405,
              "src": "246:25:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISecretStorePermissioning_$405",
                "typeString": "contract ISecretStorePermissioning"
              }
            },
            "id": 6,
            "nodeType": "InheritanceSpecifier",
            "src": "246:25:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4823,
              "src": "273:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$4823",
                "typeString": "contract Ownable"
              }
            },
            "id": 8,
            "nodeType": "InheritanceSpecifier",
            "src": "273:7:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9,
              "name": "ERC165",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4704,
              "src": "282:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC165_$4704",
                "typeString": "contract ERC165"
              }
            },
            "id": 10,
            "nodeType": "InheritanceSpecifier",
            "src": "282:6:0"
          }
        ],
        "contractDependencies": [
          405,
          4704,
          4714,
          4823
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 393,
        "linearizedBaseContracts": [
          393,
          4704,
          4714,
          4823,
          405
        ],
        "name": "PermissioningRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "PermissioningRegistry.PermissionEntry",
            "id": 18,
            "members": [
              {
                "constant": false,
                "id": 13,
                "name": "users",
                "nodeType": "VariableDeclaration",
                "scope": 18,
                "src": "329:15:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                  "typeString": "address[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 11,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "329:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 12,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "329:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                    "typeString": "address[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 15,
                "name": "admin",
                "nodeType": "VariableDeclaration",
                "scope": 18,
                "src": "354:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 14,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "354:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 17,
                "name": "exposed",
                "nodeType": "VariableDeclaration",
                "scope": 18,
                "src": "377:12:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 16,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "377:4:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "PermissionEntry",
            "nodeType": "StructDefinition",
            "scope": 393,
            "src": "296:100:0",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 22,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 393,
            "src": "406:54:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
              "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry)"
            },
            "typeName": {
              "id": 21,
              "keyType": {
                "id": 19,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "414:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "406:35:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry)"
              },
              "valueType": {
                "contractScope": null,
                "id": 20,
                "name": "PermissionEntry",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 18,
                "src": "425:15:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PermissionEntry_$18_storage_ptr",
                  "typeString": "struct PermissioningRegistry.PermissionEntry"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 26,
            "name": "NewAdmin",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 25,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24,
                  "indexed": true,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "482:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 23,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "482:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "481:26:0"
            },
            "src": "467:41:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 30,
            "name": "Permission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 29,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28,
                  "indexed": true,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 30,
                  "src": "530:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "530:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "529:26:0"
            },
            "src": "513:43:0"
          },
          {
            "body": {
              "id": 42,
              "nodeType": "Block",
              "src": "600:103:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 36,
                            "name": "document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32,
                            "src": "627:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 35,
                          "name": "_isAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 374,
                          "src": "618:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32) view returns (bool)"
                          }
                        },
                        "id": 37,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "618:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616c6c65722068617320746f206265207468652063757272656e742061646d696e206f72206f776e65722e",
                        "id": 38,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "638:46:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_88f66d4c4a74c0d3376762e13427122e988fd9032bcc2a2a735c43a0ff7c3107",
                          "typeString": "literal_string \"Caller has to be the current admin or owner.\""
                        },
                        "value": "Caller has to be the current admin or owner."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_88f66d4c4a74c0d3376762e13427122e988fd9032bcc2a2a735c43a0ff7c3107",
                          "typeString": "literal_string \"Caller has to be the current admin or owner.\""
                        }
                      ],
                      "id": 34,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4841,
                        4842
                      ],
                      "referencedDeclaration": 4842,
                      "src": "610:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 39,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "610:75:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 40,
                  "nodeType": "ExpressionStatement",
                  "src": "610:75:0"
                },
                {
                  "id": 41,
                  "nodeType": "PlaceholderStatement",
                  "src": "695:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 43,
            "name": "onlyAdmins",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 33,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "582:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "582:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "581:18:0"
            },
            "src": "562:141:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 70,
              "nodeType": "Block",
              "src": "730:293:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 47,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4859,
                            "src": "786:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                              "typeString": "contract PermissioningRegistry"
                            }
                          },
                          "id": 48,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "checkPermissions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 314,
                          "src": "786:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (address,bytes32) view external returns (bool)"
                          }
                        },
                        "id": 49,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "selector",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "786:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 46,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4703,
                      "src": "767:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 50,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "767:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51,
                  "nodeType": "ExpressionStatement",
                  "src": "767:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 67,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 63,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 59,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 53,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4859,
                                  "src": "859:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                                    "typeString": "contract PermissioningRegistry"
                                  }
                                },
                                "id": 54,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4748,
                                "src": "859:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 55,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "selector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "859:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "^",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 56,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4859,
                                  "src": "893:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                                    "typeString": "contract PermissioningRegistry"
                                  }
                                },
                                "id": 57,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isOwner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4768,
                                "src": "893:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                  "typeString": "function () view external returns (bool)"
                                }
                              },
                              "id": 58,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "selector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "893:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "859:55:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "^",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 60,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4859,
                                "src": "929:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                                  "typeString": "contract PermissioningRegistry"
                                }
                              },
                              "id": 61,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "renounceOwnership",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4787,
                              "src": "929:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                                "typeString": "function () external"
                              }
                            },
                            "id": 62,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "selector",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "929:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "859:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "^",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 64,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4859,
                              "src": "975:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                                "typeString": "contract PermissioningRegistry"
                              }
                            },
                            "id": 65,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4799,
                            "src": "975:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 66,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "selector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "975:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "859:147:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 52,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4703,
                      "src": "827:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 68,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "827:189:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69,
                  "nodeType": "ExpressionStatement",
                  "src": "827:189:0"
                }
              ]
            },
            "documentation": null,
            "id": 71,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 44,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "720:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 45,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "730:0:0"
            },
            "scope": 393,
            "src": "709:314:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 105,
              "nodeType": "Block",
              "src": "1128:186:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 88,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 84,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 75,
                          "src": "1146:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 86,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1166:1:0",
                              "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": 85,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1158:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 87,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1158:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1146:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65772061646d696e20616464726573732063616e6e6f74206265203078302e",
                        "id": 89,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1170:34:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c1350a0c9daf183529275483bdced82abf78c62973b9b796022db5b996feaa4",
                          "typeString": "literal_string \"New admin address cannot be 0x0.\""
                        },
                        "value": "New admin address cannot be 0x0."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c1350a0c9daf183529275483bdced82abf78c62973b9b796022db5b996feaa4",
                          "typeString": "literal_string \"New admin address cannot be 0x0.\""
                        }
                      ],
                      "id": 83,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4841,
                        4842
                      ],
                      "referencedDeclaration": 4842,
                      "src": "1138:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 90,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1138:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 91,
                  "nodeType": "ExpressionStatement",
                  "src": "1138:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 97,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 92,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "1215:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 94,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 93,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 73,
                          "src": "1227:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1215:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 95,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "admin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15,
                      "src": "1215:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 96,
                      "name": "newAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 75,
                      "src": "1245:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1215:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 98,
                  "nodeType": "ExpressionStatement",
                  "src": "1215:38:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 100,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 73,
                        "src": "1277:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 99,
                      "name": "NewAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26,
                      "src": "1268:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1268:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 102,
                  "nodeType": "EmitStatement",
                  "src": "1263:23:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 103,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1303:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 82,
                  "id": 104,
                  "nodeType": "Return",
                  "src": "1296:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 106,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 78,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 73,
                    "src": "1103:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 79,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 77,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "1092:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1092:20:0"
              }
            ],
            "name": "setAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 76,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 73,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1047:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 72,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1047:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 75,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1065:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 74,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1065:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1046:36:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 82,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 81,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1122:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 80,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1122:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1121:6:0"
            },
            "scope": 393,
            "src": "1029:285:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 132,
              "nodeType": "Block",
              "src": "1419:109:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 119,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "1429:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 121,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 120,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 108,
                          "src": "1441:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1429:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "users",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13,
                      "src": "1429:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 123,
                      "name": "_users",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 111,
                      "src": "1459:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                        "typeString": "address[] calldata"
                      }
                    },
                    "src": "1429:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "id": 125,
                  "nodeType": "ExpressionStatement",
                  "src": "1429:36:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 127,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 108,
                        "src": "1491:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 126,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "1480:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1480:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 129,
                  "nodeType": "EmitStatement",
                  "src": "1475:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1517:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 118,
                  "id": 131,
                  "nodeType": "Return",
                  "src": "1510:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 133,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 114,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 108,
                    "src": "1394:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 115,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 113,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "1383:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1383:20:0"
              }
            ],
            "name": "setUsers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 108,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 133,
                  "src": "1338:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 107,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1338:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 111,
                  "name": "_users",
                  "nodeType": "VariableDeclaration",
                  "scope": 133,
                  "src": "1356:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 109,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1356:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 110,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1356:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1337:36:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 133,
                  "src": "1413:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 116,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1413:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1412:6:0"
            },
            "scope": 393,
            "src": "1320:208:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 158,
              "nodeType": "Block",
              "src": "1632:113:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 145,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "1642:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 147,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 146,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 135,
                          "src": "1654:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1642:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 148,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exposed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17,
                      "src": "1642:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 149,
                      "name": "_exposed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 137,
                      "src": "1674:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1642:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 151,
                  "nodeType": "ExpressionStatement",
                  "src": "1642:40:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 153,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 135,
                        "src": "1708:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 152,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "1697:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1697:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 155,
                  "nodeType": "EmitStatement",
                  "src": "1692:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1734:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 144,
                  "id": 157,
                  "nodeType": "Return",
                  "src": "1727:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 159,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 140,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 135,
                    "src": "1607:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 141,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 139,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "1596:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1596:20:0"
              }
            ],
            "name": "setExposed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 135,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 159,
                  "src": "1554:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 134,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1554:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 137,
                  "name": "_exposed",
                  "nodeType": "VariableDeclaration",
                  "scope": 159,
                  "src": "1572:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 136,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1572:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1553:33:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 143,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 159,
                  "src": "1626:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 142,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1626:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1625:6:0"
            },
            "scope": 393,
            "src": "1534:211:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 185,
              "nodeType": "Block",
              "src": "1848:114:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 176,
                        "name": "newUser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 163,
                        "src": "1891:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 171,
                            "name": "permissions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22,
                            "src": "1858:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                              "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                            }
                          },
                          "id": 173,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 172,
                            "name": "document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 161,
                            "src": "1870:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1858:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                            "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                          }
                        },
                        "id": 174,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "users",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13,
                        "src": "1858:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1858:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1858:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 178,
                  "nodeType": "ExpressionStatement",
                  "src": "1858:41:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 180,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 161,
                        "src": "1925:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 179,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "1914:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1914:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 182,
                  "nodeType": "EmitStatement",
                  "src": "1909:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1951:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 170,
                  "id": 184,
                  "nodeType": "Return",
                  "src": "1944:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 186,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 166,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 161,
                    "src": "1823:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 167,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 165,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "1812:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1812:20:0"
              }
            ],
            "name": "addUser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 161,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 186,
                  "src": "1768:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 160,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1768:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 163,
                  "name": "newUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 186,
                  "src": "1786:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1786:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1767:35:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 169,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 186,
                  "src": "1842:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 168,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1842:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1841:6:0"
            },
            "scope": 393,
            "src": "1751:211:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 207,
              "nodeType": "Block",
              "src": "2057:101:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "2067:28:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 196,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "2074:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 198,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 197,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 188,
                        "src": "2086:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2074:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 200,
                  "nodeType": "ExpressionStatement",
                  "src": "2067:28:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 202,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 188,
                        "src": "2121:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 201,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "2110:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2110:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 204,
                  "nodeType": "EmitStatement",
                  "src": "2105:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2147:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 195,
                  "id": 206,
                  "nodeType": "Return",
                  "src": "2140:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 208,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 191,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 188,
                    "src": "2032:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 192,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 190,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "2021:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2021:20:0"
              }
            ],
            "name": "removePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 188,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "1994:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 187,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1994:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1993:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 194,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "2051:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 193,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2051:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2050:6:0"
            },
            "scope": 393,
            "src": "1968:190:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 255,
              "nodeType": "Block",
              "src": "2244:331:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 230,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 219,
                                "name": "permissions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22,
                                "src": "2275:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                                  "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                                }
                              },
                              "id": 221,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 220,
                                "name": "document",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 210,
                                "src": "2287:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2275:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                                "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                              }
                            },
                            "id": 222,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "admin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15,
                            "src": "2275:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2314:1:0",
                                "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": 223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2306:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2306:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2275:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 228,
                              "name": "document",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 210,
                              "src": "2329:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 227,
                            "name": "_isAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 374,
                            "src": "2320:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (bytes32) view returns (bool)"
                            }
                          },
                          "id": 229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2320:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2275:63:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "596f75206861766520746f2062652061646d696e206f72206f776e657220746f206368616e6765207065726d697373696f6e732e",
                        "id": 231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2352:54:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fe4e4535e98ff40a74168ed2f8399c547827ad49cc703e2300239f0d70e05e3c",
                          "typeString": "literal_string \"You have to be admin or owner to change permissions.\""
                        },
                        "value": "You have to be admin or owner to change permissions."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fe4e4535e98ff40a74168ed2f8399c547827ad49cc703e2300239f0d70e05e3c",
                          "typeString": "literal_string \"You have to be admin or owner to change permissions.\""
                        }
                      ],
                      "id": 218,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4841,
                        4842
                      ],
                      "referencedDeclaration": 4842,
                      "src": "2254:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2254:162:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 233,
                  "nodeType": "ExpressionStatement",
                  "src": "2254:162:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 234,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "2426:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 236,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 235,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 210,
                          "src": "2438:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2426:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 237,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "admin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15,
                      "src": "2426:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 238,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4838,
                        "src": "2456:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2456:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2426:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 241,
                  "nodeType": "ExpressionStatement",
                  "src": "2426:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 242,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "2476:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 244,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 243,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 210,
                          "src": "2488:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2476:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 245,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "users",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13,
                      "src": "2476:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 246,
                      "name": "_users",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 213,
                      "src": "2506:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                        "typeString": "address[] calldata"
                      }
                    },
                    "src": "2476:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "id": 248,
                  "nodeType": "ExpressionStatement",
                  "src": "2476:36:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 250,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 210,
                        "src": "2538:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 249,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "2527:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2527:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 252,
                  "nodeType": "EmitStatement",
                  "src": "2522:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2564:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 217,
                  "id": 254,
                  "nodeType": "Return",
                  "src": "2557:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 256,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "permission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 210,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 256,
                  "src": "2184:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 209,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2184:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 213,
                  "name": "_users",
                  "nodeType": "VariableDeclaration",
                  "scope": 256,
                  "src": "2202:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 211,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2202:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 212,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2202:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2183:36:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 216,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 256,
                  "src": "2238:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 215,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2238:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2237:6:0"
            },
            "scope": 393,
            "src": "2164:411:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 313,
              "nodeType": "Block",
              "src": "2666:382:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2680:25:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 266,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 260,
                          "src": "2696:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 265,
                        "name": "_isInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 392,
                        "src": "2681:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32) view returns (bool)"
                        }
                      },
                      "id": 267,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2681:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 272,
                  "nodeType": "IfStatement",
                  "src": "2676:68:0",
                  "trueBody": {
                    "id": 271,
                    "nodeType": "Block",
                    "src": "2707:37:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2728:5:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 264,
                        "id": 270,
                        "nodeType": "Return",
                        "src": "2721:12:0"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 273,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "2766:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 275,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 274,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 260,
                        "src": "2778:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2766:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 276,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "exposed",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17,
                    "src": "2766:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 280,
                  "nodeType": "IfStatement",
                  "src": "2762:71:0",
                  "trueBody": {
                    "id": 279,
                    "nodeType": "Block",
                    "src": "2797:36:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2818:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 264,
                        "id": 278,
                        "nodeType": "Return",
                        "src": "2811:11:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    284
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 284,
                      "name": "users",
                      "nodeType": "VariableDeclaration",
                      "scope": 314,
                      "src": "2843:23:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 282,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2843:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 283,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2843:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 289,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 285,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "2869:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 287,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 286,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 260,
                        "src": "2881:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2869:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 288,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "users",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 13,
                    "src": "2869:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2843:53:0"
                },
                {
                  "body": {
                    "id": 309,
                    "nodeType": "Block",
                    "src": "2946:74:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 301,
                              "name": "users",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 284,
                              "src": "2964:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[] storage pointer"
                              }
                            },
                            "id": 303,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 302,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 291,
                              "src": "2970:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2964:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 304,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 258,
                            "src": "2976:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2964:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 308,
                        "nodeType": "IfStatement",
                        "src": "2960:49:0",
                        "trueBody": {
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 306,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3005:4:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "functionReturnParameters": 264,
                          "id": 307,
                          "nodeType": "Return",
                          "src": "2998:11:0"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 294,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 291,
                      "src": "2923:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 295,
                        "name": "users",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 284,
                        "src": "2927:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[] storage pointer"
                        }
                      },
                      "id": 296,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2927:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2923:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 310,
                  "initializationExpression": {
                    "assignments": [
                      291
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 291,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 314,
                        "src": "2911:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 290,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2911:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 293,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 292,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2920:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2911:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2941:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 298,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 291,
                        "src": "2941:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 300,
                    "nodeType": "ExpressionStatement",
                    "src": "2941:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "2906:114:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3036:5:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 264,
                  "id": 312,
                  "nodeType": "Return",
                  "src": "3029:12:0"
                }
              ]
            },
            "documentation": null,
            "id": 314,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 258,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 314,
                  "src": "2607:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 257,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2607:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 260,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 314,
                  "src": "2621:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 259,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2621:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2606:32:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 263,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 314,
                  "src": "2660:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 262,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2660:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2659:6:0"
            },
            "scope": 393,
            "src": "2581:467:0",
            "stateMutability": "view",
            "superFunction": 404,
            "visibility": "public"
          },
          {
            "body": {
              "id": 326,
              "nodeType": "Block",
              "src": "3120:51:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 321,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "3137:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 323,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 322,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 316,
                        "src": "3149:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3137:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 324,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "admin",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 15,
                    "src": "3137:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 320,
                  "id": 325,
                  "nodeType": "Return",
                  "src": "3130:34:0"
                }
              ]
            },
            "documentation": null,
            "id": 327,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 317,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 316,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 327,
                  "src": "3072:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 315,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3072:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3071:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 319,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 327,
                  "src": "3111:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3111:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3110:9:0"
            },
            "scope": 393,
            "src": "3054:117:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 340,
              "nodeType": "Block",
              "src": "3245:51:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 335,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "3262:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 337,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 336,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 329,
                        "src": "3274:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3262:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 338,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "users",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 13,
                    "src": "3262:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "functionReturnParameters": 334,
                  "id": 339,
                  "nodeType": "Return",
                  "src": "3255:34:0"
                }
              ]
            },
            "documentation": null,
            "id": 341,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getUsers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 329,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3195:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 328,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3195:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3194:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 334,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 333,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3234:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 331,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3234:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 332,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3234:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3233:11:0"
            },
            "scope": 393,
            "src": "3177:119:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 353,
              "nodeType": "Block",
              "src": "3366:53:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 348,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "3383:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 350,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 349,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 343,
                        "src": "3395:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3383:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 351,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "exposed",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17,
                    "src": "3383:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 347,
                  "id": 352,
                  "nodeType": "Return",
                  "src": "3376:36:0"
                }
              ]
            },
            "documentation": null,
            "id": 354,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isExposed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 343,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 354,
                  "src": "3321:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 342,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3321:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3320:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 346,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 354,
                  "src": "3360:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 345,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3360:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3359:6:0"
            },
            "scope": 393,
            "src": "3302:117:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 373,
              "nodeType": "Block",
              "src": "3490:80:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 361,
                                "name": "permissions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22,
                                "src": "3508:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                                  "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                                }
                              },
                              "id": 363,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 362,
                                "name": "document",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 356,
                                "src": "3520:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3508:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                                "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                              }
                            },
                            "id": 364,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "admin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15,
                            "src": "3508:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 365,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4838,
                              "src": "3539:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 366,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3539:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3508:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 368,
                            "name": "isOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4768,
                            "src": "3553:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3553:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3508:54:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 371,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3507:56:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 360,
                  "id": 372,
                  "nodeType": "Return",
                  "src": "3500:63:0"
                }
              ]
            },
            "documentation": null,
            "id": 374,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 356,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 374,
                  "src": "3443:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 355,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3443:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3442:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 359,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 374,
                  "src": "3484:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 358,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3484:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3483:6:0"
            },
            "scope": 393,
            "src": "3425:145:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 391,
              "nodeType": "Block",
              "src": "3647:67:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 388,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 381,
                              "name": "permissions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22,
                              "src": "3665:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                                "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                              }
                            },
                            "id": 383,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 382,
                              "name": "document",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 376,
                              "src": "3677:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3665:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                              "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                            }
                          },
                          "id": 384,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "admin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 15,
                          "src": "3665:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 386,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3704:1:0",
                              "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": 385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3696:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3696:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3665:41:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 389,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3664:43:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 380,
                  "id": 390,
                  "nodeType": "Return",
                  "src": "3657:50:0"
                }
              ]
            },
            "documentation": null,
            "id": 392,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isInitialized",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 377,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 376,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 392,
                  "src": "3600:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 375,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3600:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3599:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 379,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 392,
                  "src": "3641:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 378,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3641:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3640:6:0"
            },
            "scope": 393,
            "src": "3576:138:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 394,
        "src": "212:3504:0"
      }
    ],
    "src": "0:3716:0"
  },
  "legacyAST": {
    "absolutePath": "/home/aznagy/work/secretstore/secretstore-contracts/contracts/PermissioningRegistry.sol",
    "exportedSymbols": {
      "PermissioningRegistry": [
        393
      ]
    },
    "id": 394,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:0"
      },
      {
        "absolutePath": "/home/aznagy/work/secretstore/secretstore-contracts/contracts/interfaces/ISecretStorePermissioning.sol",
        "file": "./interfaces/ISecretStorePermissioning.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 394,
        "sourceUnit": 406,
        "src": "26:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 394,
        "sourceUnit": 4824,
        "src": "79:63:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/introspection/ERC165.sol",
        "file": "openzeppelin-solidity/contracts/introspection/ERC165.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 394,
        "sourceUnit": 4705,
        "src": "143:66:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5,
              "name": "ISecretStorePermissioning",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 405,
              "src": "246:25:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISecretStorePermissioning_$405",
                "typeString": "contract ISecretStorePermissioning"
              }
            },
            "id": 6,
            "nodeType": "InheritanceSpecifier",
            "src": "246:25:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4823,
              "src": "273:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$4823",
                "typeString": "contract Ownable"
              }
            },
            "id": 8,
            "nodeType": "InheritanceSpecifier",
            "src": "273:7:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9,
              "name": "ERC165",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4704,
              "src": "282:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC165_$4704",
                "typeString": "contract ERC165"
              }
            },
            "id": 10,
            "nodeType": "InheritanceSpecifier",
            "src": "282:6:0"
          }
        ],
        "contractDependencies": [
          405,
          4704,
          4714,
          4823
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 393,
        "linearizedBaseContracts": [
          393,
          4704,
          4714,
          4823,
          405
        ],
        "name": "PermissioningRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "PermissioningRegistry.PermissionEntry",
            "id": 18,
            "members": [
              {
                "constant": false,
                "id": 13,
                "name": "users",
                "nodeType": "VariableDeclaration",
                "scope": 18,
                "src": "329:15:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                  "typeString": "address[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 11,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "329:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 12,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "329:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                    "typeString": "address[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 15,
                "name": "admin",
                "nodeType": "VariableDeclaration",
                "scope": 18,
                "src": "354:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 14,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "354:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 17,
                "name": "exposed",
                "nodeType": "VariableDeclaration",
                "scope": 18,
                "src": "377:12:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 16,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "377:4:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "PermissionEntry",
            "nodeType": "StructDefinition",
            "scope": 393,
            "src": "296:100:0",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 22,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 393,
            "src": "406:54:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
              "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry)"
            },
            "typeName": {
              "id": 21,
              "keyType": {
                "id": 19,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "414:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "406:35:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry)"
              },
              "valueType": {
                "contractScope": null,
                "id": 20,
                "name": "PermissionEntry",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 18,
                "src": "425:15:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PermissionEntry_$18_storage_ptr",
                  "typeString": "struct PermissioningRegistry.PermissionEntry"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 26,
            "name": "NewAdmin",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 25,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24,
                  "indexed": true,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "482:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 23,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "482:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "481:26:0"
            },
            "src": "467:41:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 30,
            "name": "Permission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 29,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28,
                  "indexed": true,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 30,
                  "src": "530:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "530:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "529:26:0"
            },
            "src": "513:43:0"
          },
          {
            "body": {
              "id": 42,
              "nodeType": "Block",
              "src": "600:103:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 36,
                            "name": "document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32,
                            "src": "627:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 35,
                          "name": "_isAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 374,
                          "src": "618:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32) view returns (bool)"
                          }
                        },
                        "id": 37,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "618:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616c6c65722068617320746f206265207468652063757272656e742061646d696e206f72206f776e65722e",
                        "id": 38,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "638:46:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_88f66d4c4a74c0d3376762e13427122e988fd9032bcc2a2a735c43a0ff7c3107",
                          "typeString": "literal_string \"Caller has to be the current admin or owner.\""
                        },
                        "value": "Caller has to be the current admin or owner."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_88f66d4c4a74c0d3376762e13427122e988fd9032bcc2a2a735c43a0ff7c3107",
                          "typeString": "literal_string \"Caller has to be the current admin or owner.\""
                        }
                      ],
                      "id": 34,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4841,
                        4842
                      ],
                      "referencedDeclaration": 4842,
                      "src": "610:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 39,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "610:75:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 40,
                  "nodeType": "ExpressionStatement",
                  "src": "610:75:0"
                },
                {
                  "id": 41,
                  "nodeType": "PlaceholderStatement",
                  "src": "695:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 43,
            "name": "onlyAdmins",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 33,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "582:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "582:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "581:18:0"
            },
            "src": "562:141:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 70,
              "nodeType": "Block",
              "src": "730:293:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 47,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4859,
                            "src": "786:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                              "typeString": "contract PermissioningRegistry"
                            }
                          },
                          "id": 48,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "checkPermissions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 314,
                          "src": "786:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (address,bytes32) view external returns (bool)"
                          }
                        },
                        "id": 49,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "selector",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "786:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 46,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4703,
                      "src": "767:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 50,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "767:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51,
                  "nodeType": "ExpressionStatement",
                  "src": "767:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 67,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 63,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 59,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 53,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4859,
                                  "src": "859:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                                    "typeString": "contract PermissioningRegistry"
                                  }
                                },
                                "id": 54,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4748,
                                "src": "859:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 55,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "selector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "859:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "^",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 56,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4859,
                                  "src": "893:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                                    "typeString": "contract PermissioningRegistry"
                                  }
                                },
                                "id": 57,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isOwner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4768,
                                "src": "893:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                  "typeString": "function () view external returns (bool)"
                                }
                              },
                              "id": 58,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "selector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "893:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "859:55:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "^",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 60,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4859,
                                "src": "929:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                                  "typeString": "contract PermissioningRegistry"
                                }
                              },
                              "id": 61,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "renounceOwnership",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4787,
                              "src": "929:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                                "typeString": "function () external"
                              }
                            },
                            "id": 62,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "selector",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "929:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "859:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "^",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 64,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4859,
                              "src": "975:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PermissioningRegistry_$393",
                                "typeString": "contract PermissioningRegistry"
                              }
                            },
                            "id": 65,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4799,
                            "src": "975:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 66,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "selector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "975:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "859:147:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 52,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4703,
                      "src": "827:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 68,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "827:189:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69,
                  "nodeType": "ExpressionStatement",
                  "src": "827:189:0"
                }
              ]
            },
            "documentation": null,
            "id": 71,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 44,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "720:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 45,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "730:0:0"
            },
            "scope": 393,
            "src": "709:314:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 105,
              "nodeType": "Block",
              "src": "1128:186:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 88,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 84,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 75,
                          "src": "1146:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 86,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1166:1:0",
                              "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": 85,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1158:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 87,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1158:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1146:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65772061646d696e20616464726573732063616e6e6f74206265203078302e",
                        "id": 89,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1170:34:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c1350a0c9daf183529275483bdced82abf78c62973b9b796022db5b996feaa4",
                          "typeString": "literal_string \"New admin address cannot be 0x0.\""
                        },
                        "value": "New admin address cannot be 0x0."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c1350a0c9daf183529275483bdced82abf78c62973b9b796022db5b996feaa4",
                          "typeString": "literal_string \"New admin address cannot be 0x0.\""
                        }
                      ],
                      "id": 83,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4841,
                        4842
                      ],
                      "referencedDeclaration": 4842,
                      "src": "1138:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 90,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1138:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 91,
                  "nodeType": "ExpressionStatement",
                  "src": "1138:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 97,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 92,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "1215:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 94,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 93,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 73,
                          "src": "1227:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1215:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 95,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "admin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15,
                      "src": "1215:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 96,
                      "name": "newAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 75,
                      "src": "1245:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1215:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 98,
                  "nodeType": "ExpressionStatement",
                  "src": "1215:38:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 100,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 73,
                        "src": "1277:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 99,
                      "name": "NewAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26,
                      "src": "1268:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1268:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 102,
                  "nodeType": "EmitStatement",
                  "src": "1263:23:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 103,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1303:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 82,
                  "id": 104,
                  "nodeType": "Return",
                  "src": "1296:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 106,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 78,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 73,
                    "src": "1103:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 79,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 77,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "1092:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1092:20:0"
              }
            ],
            "name": "setAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 76,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 73,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1047:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 72,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1047:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 75,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1065:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 74,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1065:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1046:36:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 82,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 81,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 106,
                  "src": "1122:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 80,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1122:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1121:6:0"
            },
            "scope": 393,
            "src": "1029:285:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 132,
              "nodeType": "Block",
              "src": "1419:109:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 119,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "1429:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 121,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 120,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 108,
                          "src": "1441:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1429:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "users",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13,
                      "src": "1429:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 123,
                      "name": "_users",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 111,
                      "src": "1459:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                        "typeString": "address[] calldata"
                      }
                    },
                    "src": "1429:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "id": 125,
                  "nodeType": "ExpressionStatement",
                  "src": "1429:36:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 127,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 108,
                        "src": "1491:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 126,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "1480:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1480:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 129,
                  "nodeType": "EmitStatement",
                  "src": "1475:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1517:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 118,
                  "id": 131,
                  "nodeType": "Return",
                  "src": "1510:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 133,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 114,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 108,
                    "src": "1394:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 115,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 113,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "1383:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1383:20:0"
              }
            ],
            "name": "setUsers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 108,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 133,
                  "src": "1338:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 107,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1338:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 111,
                  "name": "_users",
                  "nodeType": "VariableDeclaration",
                  "scope": 133,
                  "src": "1356:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 109,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1356:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 110,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1356:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1337:36:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 133,
                  "src": "1413:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 116,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1413:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1412:6:0"
            },
            "scope": 393,
            "src": "1320:208:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 158,
              "nodeType": "Block",
              "src": "1632:113:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 145,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "1642:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 147,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 146,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 135,
                          "src": "1654:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1642:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 148,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exposed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17,
                      "src": "1642:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 149,
                      "name": "_exposed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 137,
                      "src": "1674:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1642:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 151,
                  "nodeType": "ExpressionStatement",
                  "src": "1642:40:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 153,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 135,
                        "src": "1708:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 152,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "1697:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1697:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 155,
                  "nodeType": "EmitStatement",
                  "src": "1692:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1734:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 144,
                  "id": 157,
                  "nodeType": "Return",
                  "src": "1727:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 159,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 140,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 135,
                    "src": "1607:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 141,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 139,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "1596:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1596:20:0"
              }
            ],
            "name": "setExposed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 135,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 159,
                  "src": "1554:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 134,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1554:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 137,
                  "name": "_exposed",
                  "nodeType": "VariableDeclaration",
                  "scope": 159,
                  "src": "1572:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 136,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1572:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1553:33:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 143,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 159,
                  "src": "1626:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 142,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1626:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1625:6:0"
            },
            "scope": 393,
            "src": "1534:211:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 185,
              "nodeType": "Block",
              "src": "1848:114:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 176,
                        "name": "newUser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 163,
                        "src": "1891:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 171,
                            "name": "permissions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22,
                            "src": "1858:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                              "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                            }
                          },
                          "id": 173,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 172,
                            "name": "document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 161,
                            "src": "1870:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1858:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                            "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                          }
                        },
                        "id": 174,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "users",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13,
                        "src": "1858:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1858:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1858:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 178,
                  "nodeType": "ExpressionStatement",
                  "src": "1858:41:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 180,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 161,
                        "src": "1925:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 179,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "1914:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1914:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 182,
                  "nodeType": "EmitStatement",
                  "src": "1909:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1951:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 170,
                  "id": 184,
                  "nodeType": "Return",
                  "src": "1944:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 186,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 166,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 161,
                    "src": "1823:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 167,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 165,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "1812:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1812:20:0"
              }
            ],
            "name": "addUser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 161,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 186,
                  "src": "1768:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 160,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1768:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 163,
                  "name": "newUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 186,
                  "src": "1786:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1786:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1767:35:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 169,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 186,
                  "src": "1842:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 168,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1842:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1841:6:0"
            },
            "scope": 393,
            "src": "1751:211:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 207,
              "nodeType": "Block",
              "src": "2057:101:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "2067:28:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 196,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "2074:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 198,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 197,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 188,
                        "src": "2086:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2074:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 200,
                  "nodeType": "ExpressionStatement",
                  "src": "2067:28:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 202,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 188,
                        "src": "2121:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 201,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "2110:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2110:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 204,
                  "nodeType": "EmitStatement",
                  "src": "2105:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2147:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 195,
                  "id": 206,
                  "nodeType": "Return",
                  "src": "2140:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 208,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 191,
                    "name": "document",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 188,
                    "src": "2032:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 192,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 190,
                  "name": "onlyAdmins",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "2021:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2021:20:0"
              }
            ],
            "name": "removePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 188,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "1994:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 187,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1994:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1993:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 194,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "2051:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 193,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2051:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2050:6:0"
            },
            "scope": 393,
            "src": "1968:190:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 255,
              "nodeType": "Block",
              "src": "2244:331:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 230,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 219,
                                "name": "permissions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22,
                                "src": "2275:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                                  "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                                }
                              },
                              "id": 221,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 220,
                                "name": "document",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 210,
                                "src": "2287:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2275:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                                "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                              }
                            },
                            "id": 222,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "admin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15,
                            "src": "2275:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2314:1:0",
                                "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": 223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2306:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2306:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2275:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 228,
                              "name": "document",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 210,
                              "src": "2329:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 227,
                            "name": "_isAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 374,
                            "src": "2320:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (bytes32) view returns (bool)"
                            }
                          },
                          "id": 229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2320:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2275:63:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "596f75206861766520746f2062652061646d696e206f72206f776e657220746f206368616e6765207065726d697373696f6e732e",
                        "id": 231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2352:54:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fe4e4535e98ff40a74168ed2f8399c547827ad49cc703e2300239f0d70e05e3c",
                          "typeString": "literal_string \"You have to be admin or owner to change permissions.\""
                        },
                        "value": "You have to be admin or owner to change permissions."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fe4e4535e98ff40a74168ed2f8399c547827ad49cc703e2300239f0d70e05e3c",
                          "typeString": "literal_string \"You have to be admin or owner to change permissions.\""
                        }
                      ],
                      "id": 218,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4841,
                        4842
                      ],
                      "referencedDeclaration": 4842,
                      "src": "2254:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2254:162:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 233,
                  "nodeType": "ExpressionStatement",
                  "src": "2254:162:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 234,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "2426:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 236,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 235,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 210,
                          "src": "2438:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2426:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 237,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "admin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15,
                      "src": "2426:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 238,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4838,
                        "src": "2456:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2456:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2426:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 241,
                  "nodeType": "ExpressionStatement",
                  "src": "2426:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 242,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "2476:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                            "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                          }
                        },
                        "id": 244,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 243,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 210,
                          "src": "2488:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2476:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                          "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                        }
                      },
                      "id": 245,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "users",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13,
                      "src": "2476:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 246,
                      "name": "_users",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 213,
                      "src": "2506:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                        "typeString": "address[] calldata"
                      }
                    },
                    "src": "2476:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "id": 248,
                  "nodeType": "ExpressionStatement",
                  "src": "2476:36:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 250,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 210,
                        "src": "2538:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 249,
                      "name": "Permission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30,
                      "src": "2527:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2527:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 252,
                  "nodeType": "EmitStatement",
                  "src": "2522:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2564:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 217,
                  "id": 254,
                  "nodeType": "Return",
                  "src": "2557:11:0"
                }
              ]
            },
            "documentation": null,
            "id": 256,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "permission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 210,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 256,
                  "src": "2184:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 209,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2184:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 213,
                  "name": "_users",
                  "nodeType": "VariableDeclaration",
                  "scope": 256,
                  "src": "2202:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 211,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2202:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 212,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2202:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2183:36:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 216,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 256,
                  "src": "2238:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 215,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2238:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2237:6:0"
            },
            "scope": 393,
            "src": "2164:411:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 313,
              "nodeType": "Block",
              "src": "2666:382:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2680:25:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 266,
                          "name": "document",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 260,
                          "src": "2696:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 265,
                        "name": "_isInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 392,
                        "src": "2681:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32) view returns (bool)"
                        }
                      },
                      "id": 267,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2681:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 272,
                  "nodeType": "IfStatement",
                  "src": "2676:68:0",
                  "trueBody": {
                    "id": 271,
                    "nodeType": "Block",
                    "src": "2707:37:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2728:5:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 264,
                        "id": 270,
                        "nodeType": "Return",
                        "src": "2721:12:0"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 273,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "2766:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 275,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 274,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 260,
                        "src": "2778:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2766:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 276,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "exposed",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17,
                    "src": "2766:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 280,
                  "nodeType": "IfStatement",
                  "src": "2762:71:0",
                  "trueBody": {
                    "id": 279,
                    "nodeType": "Block",
                    "src": "2797:36:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2818:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 264,
                        "id": 278,
                        "nodeType": "Return",
                        "src": "2811:11:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    284
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 284,
                      "name": "users",
                      "nodeType": "VariableDeclaration",
                      "scope": 314,
                      "src": "2843:23:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 282,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2843:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 283,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2843:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 289,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 285,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "2869:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 287,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 286,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 260,
                        "src": "2881:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2869:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 288,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "users",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 13,
                    "src": "2869:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2843:53:0"
                },
                {
                  "body": {
                    "id": 309,
                    "nodeType": "Block",
                    "src": "2946:74:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 301,
                              "name": "users",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 284,
                              "src": "2964:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[] storage pointer"
                              }
                            },
                            "id": 303,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 302,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 291,
                              "src": "2970:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2964:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 304,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 258,
                            "src": "2976:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2964:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 308,
                        "nodeType": "IfStatement",
                        "src": "2960:49:0",
                        "trueBody": {
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 306,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3005:4:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "functionReturnParameters": 264,
                          "id": 307,
                          "nodeType": "Return",
                          "src": "2998:11:0"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 294,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 291,
                      "src": "2923:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 295,
                        "name": "users",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 284,
                        "src": "2927:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[] storage pointer"
                        }
                      },
                      "id": 296,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2927:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2923:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 310,
                  "initializationExpression": {
                    "assignments": [
                      291
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 291,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 314,
                        "src": "2911:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 290,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2911:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 293,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 292,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2920:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2911:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2941:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 298,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 291,
                        "src": "2941:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 300,
                    "nodeType": "ExpressionStatement",
                    "src": "2941:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "2906:114:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3036:5:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 264,
                  "id": 312,
                  "nodeType": "Return",
                  "src": "3029:12:0"
                }
              ]
            },
            "documentation": null,
            "id": 314,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 258,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 314,
                  "src": "2607:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 257,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2607:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 260,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 314,
                  "src": "2621:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 259,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2621:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2606:32:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 263,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 314,
                  "src": "2660:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 262,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2660:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2659:6:0"
            },
            "scope": 393,
            "src": "2581:467:0",
            "stateMutability": "view",
            "superFunction": 404,
            "visibility": "public"
          },
          {
            "body": {
              "id": 326,
              "nodeType": "Block",
              "src": "3120:51:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 321,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "3137:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 323,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 322,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 316,
                        "src": "3149:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3137:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 324,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "admin",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 15,
                    "src": "3137:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 320,
                  "id": 325,
                  "nodeType": "Return",
                  "src": "3130:34:0"
                }
              ]
            },
            "documentation": null,
            "id": 327,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 317,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 316,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 327,
                  "src": "3072:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 315,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3072:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3071:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 319,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 327,
                  "src": "3111:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3111:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3110:9:0"
            },
            "scope": 393,
            "src": "3054:117:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 340,
              "nodeType": "Block",
              "src": "3245:51:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 335,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "3262:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 337,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 336,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 329,
                        "src": "3274:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3262:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 338,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "users",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 13,
                    "src": "3262:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "functionReturnParameters": 334,
                  "id": 339,
                  "nodeType": "Return",
                  "src": "3255:34:0"
                }
              ]
            },
            "documentation": null,
            "id": 341,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getUsers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 329,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3195:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 328,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3195:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3194:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 334,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 333,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3234:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 331,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3234:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 332,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3234:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3233:11:0"
            },
            "scope": 393,
            "src": "3177:119:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 353,
              "nodeType": "Block",
              "src": "3366:53:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 348,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "3383:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                          "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                        }
                      },
                      "id": 350,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 349,
                        "name": "document",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 343,
                        "src": "3395:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3383:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                        "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                      }
                    },
                    "id": 351,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "exposed",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17,
                    "src": "3383:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 347,
                  "id": 352,
                  "nodeType": "Return",
                  "src": "3376:36:0"
                }
              ]
            },
            "documentation": null,
            "id": 354,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isExposed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 343,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 354,
                  "src": "3321:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 342,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3321:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3320:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 346,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 354,
                  "src": "3360:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 345,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3360:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3359:6:0"
            },
            "scope": 393,
            "src": "3302:117:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 373,
              "nodeType": "Block",
              "src": "3490:80:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 361,
                                "name": "permissions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22,
                                "src": "3508:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                                  "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                                }
                              },
                              "id": 363,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 362,
                                "name": "document",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 356,
                                "src": "3520:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3508:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                                "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                              }
                            },
                            "id": 364,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "admin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 15,
                            "src": "3508:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 365,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4838,
                              "src": "3539:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 366,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3539:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3508:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 368,
                            "name": "isOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4768,
                            "src": "3553:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3553:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3508:54:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 371,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3507:56:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 360,
                  "id": 372,
                  "nodeType": "Return",
                  "src": "3500:63:0"
                }
              ]
            },
            "documentation": null,
            "id": 374,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 356,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 374,
                  "src": "3443:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 355,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3443:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3442:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 359,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 374,
                  "src": "3484:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 358,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3484:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3483:6:0"
            },
            "scope": 393,
            "src": "3425:145:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 391,
              "nodeType": "Block",
              "src": "3647:67:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 388,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 381,
                              "name": "permissions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22,
                              "src": "3665:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PermissionEntry_$18_storage_$",
                                "typeString": "mapping(bytes32 => struct PermissioningRegistry.PermissionEntry storage ref)"
                              }
                            },
                            "id": 383,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 382,
                              "name": "document",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 376,
                              "src": "3677:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3665:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PermissionEntry_$18_storage",
                              "typeString": "struct PermissioningRegistry.PermissionEntry storage ref"
                            }
                          },
                          "id": 384,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "admin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 15,
                          "src": "3665:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 386,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3704:1:0",
                              "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": 385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3696:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3696:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3665:41:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 389,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3664:43:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 380,
                  "id": 390,
                  "nodeType": "Return",
                  "src": "3657:50:0"
                }
              ]
            },
            "documentation": null,
            "id": 392,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isInitialized",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 377,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 376,
                  "name": "document",
                  "nodeType": "VariableDeclaration",
                  "scope": 392,
                  "src": "3600:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 375,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3600:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3599:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 379,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 392,
                  "src": "3641:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 378,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3641:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3640:6:0"
            },
            "scope": 393,
            "src": "3576:138:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 394,
        "src": "212:3504:0"
      }
    ],
    "src": "0:3716:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {
    "401697": {
      "events": {},
      "links": {},
      "address": "0xc90689f076f3ff3641da388b886c9843ce16868d",
      "transactionHash": "0x4a7819e6d27c2a5125fb107edcca51f7c9fdbebcb72fc24875a1a66619915301"
    }
  },
  "schemaVersion": "2.0.2",
  "updatedAt": "2019-01-23T09:53:59.518Z"
}