{
  "contractName": "ACL",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "hasInitialized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "NO_PERMISSION",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getEVMScriptExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRecoveryVault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CREATE_PERMISSIONS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "allowRecoverability",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitializationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "transferToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEVMScriptRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ANY_ENTITY",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EMPTY_PARAM_HASH",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isPetrified",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "BURN_ENTITY",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "entity",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "app",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "allowed",
          "type": "bool"
        }
      ],
      "name": "SetPermission",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "entity",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "app",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "paramsHash",
          "type": "bytes32"
        }
      ],
      "name": "SetPermissionParams",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "app",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "manager",
          "type": "address"
        }
      ],
      "name": "ChangePermissionManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "executor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "script",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "input",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "ScriptResult",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "vault",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RecoverToVault",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_permissionsCreator",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_manager",
          "type": "address"
        }
      ],
      "name": "createPermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "grantPermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "grantPermissionP",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "revokePermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newManager",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "setPermissionManager",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "removePermissionManager",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "createBurnedPermission",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "burnPermissionManager",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "getPermissionParamsLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_entity",
          "type": "address"
        },
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getPermissionParam",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        },
        {
          "name": "",
          "type": "uint8"
        },
        {
          "name": "",
          "type": "uint240"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_app",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "getPermissionManager",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_who",
          "type": "address"
        },
        {
          "name": "_where",
          "type": "address"
        },
        {
          "name": "_what",
          "type": "bytes32"
        }
      ],
      "name": "hasPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_who",
          "type": "address"
        },
        {
          "name": "_where",
          "type": "address"
        },
        {
          "name": "_what",
          "type": "bytes32"
        },
        {
          "name": "_how",
          "type": "uint256[]"
        }
      ],
      "name": "hasPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_who",
          "type": "address"
        },
        {
          "name": "_where",
          "type": "address"
        },
        {
          "name": "_what",
          "type": "bytes32"
        },
        {
          "name": "_how",
          "type": "bytes"
        }
      ],
      "name": "hasPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "name": "_who",
          "type": "address"
        },
        {
          "name": "_where",
          "type": "address"
        },
        {
          "name": "_what",
          "type": "bytes32"
        },
        {
          "name": "_how",
          "type": "uint256[]"
        }
      ],
      "name": "evalParams",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052620000176401000000006200001d810204565b6200023b565b6200003064010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000d0578181015183820152602001620000b6565b50505050905090810190601f168015620000fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200012360001964010000000062000154810204565b565b60006200014f60008051602062003075833981519152640100000000620024116200023382021704565b905090565b6200016764010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000d0578181015183820152602001620000b6565b5062000230600080516020620030758339815191528264010000000062002dc16200023782021704565b50565b5490565b9055565b612e2a806200024b6000396000f3006080604052600436106101955763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461019a5780630808343e146101c357806309699ff5146101f65780630a8ed3db1461022757806315949ed71461025e5780631b5e75be146102a75780631d63ff2b146103295780632914b9bd1461033e57806332f0a3b5146103c05780633d6ab68f146103d55780636815c992146103ea5780636d6712d81461046b5780637e7db6e1146104a257806380afdea8146104d05780638b3dd749146104e55780639d0effdb146104fa5780639d4941d814610531578063a03c58321461055f578063a1658fad146105dd578063a479e50814610651578063a5ed8bf814610666578063a885508a1461067b578063afd925df146106ac578063b1905727146106e3578063be03847814610714578063c4d66de814610752578063c513f66e14610780578063d4aae0c414610795578063de4796ed146107aa578063f516bc0e146107bf578063f520b58d146107d4578063fdef910614610855575b600080fd5b3480156101a657600080fd5b506101af6108d1565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166024356108fa565b005b34801561020257600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043516602435610aee565b34801561023357600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610bc0565b34801561026a57600080fd5b5061029573ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610bfc565b60408051918252519081900360200190f35b3480156102b357600080fd5b5060408051602060046084358181013583810280860185019096528085526101af958335956024803573ffffffffffffffffffffffffffffffffffffffff9081169760443590911696606435963696919560a495949091019282919085019084908082843750949750610c3e9650505050505050565b34801561033557600080fd5b50610295610c8b565b34801561034a57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610397943694929360249392840191908190840183828082843750949750610c909650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103cc57600080fd5b50610397610d9c565b3480156103e157600080fd5b50610295610e3a565b3480156103f657600080fd5b5060408051606435600481810135602081810285810182019096528185526101f49573ffffffffffffffffffffffffffffffffffffffff84358116966024803590921696604435963696909560849593949290920192909182919085019084908082843750949750610e5e9650505050505050565b34801561047757600080fd5b506101af73ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610f6f565b3480156104ae57600080fd5b506101af73ffffffffffffffffffffffffffffffffffffffff60043516610f96565b3480156104dc57600080fd5b50610295610f9c565b3480156104f157600080fd5b50610295610fcc565b34801561050657600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610ff7565b34801561053d57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166110c4565b34801561056b57600080fd5b5061059973ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356064356113e6565b6040805160ff94851681529290931660208301527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168183015290519081900360600190f35b3480156105e957600080fd5b5060408051602060046044358181013583810280860185019096528085526101af95833573ffffffffffffffffffffffffffffffffffffffff1695602480359636969560649593949201929182918501908490808284375094975061147b9650505050505050565b34801561065d57600080fd5b50610397611609565b34801561067257600080fd5b506103976116cb565b34801561068757600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166024356116d1565b3480156106b857600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561179d565b3480156106ef57600080fd5b5061039773ffffffffffffffffffffffffffffffffffffffff60043516602435611868565b34801561072057600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243581169060443590606435166118a6565b34801561075e57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043516611a55565b34801561078c57600080fd5b50610295611bed565b3480156107a157600080fd5b50610397611c11565b3480156107b657600080fd5b506101af611c3c565b3480156107cb57600080fd5b50610397611c4f565b3480156107e057600080fd5b5060408051606435600481810135602081810285810182019096528185526101af9573ffffffffffffffffffffffffffffffffffffffff84358116966024803590921696604435963696909560849593949290920192909182919085019084908082843750949750611c549650505050505050565b34801561086157600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101af9473ffffffffffffffffffffffffffffffffffffffff8135811695602480359092169560443595369560849401918190840183828082843750949750611cf89650505050505050565b6000806108dc610fcc565b905080158015906108f45750806108f1611d0e565b10155b91505090565b604080516000808252602082019092527f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a9161093c9133918491905b5061147b565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610a15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109da5781810151838201526020016109c2565b50505050905090810190601f168015610a075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082826000610a248383611868565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e41474552000000000000000000000000815250901515610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae760018686611d12565b5050505050565b8181610afa8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610bba60018585611d12565b50505050565b610bf78383836000604051908082528060200260200182016040528015610bf1578160200160208202803883390190505b50610e5e565b505050565b600060016000806000610c10888888611da9565b81526020808201929092526040908101600090812054845291830193909352910190205490505b9392505050565b60007f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563861415610c7057506001610c82565b610c7f86600087878787611ea8565b90505b95945050505050565b600081565b6000610c9a611609565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b505192915050565b6000610da6611c11565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b505050506040513d6020811015610e3357600080fd5b5051905090565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a81565b60008383610e6c8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b506000845111610f4f577f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563610f58565b610f58846120f1565b9250610f6687878786612303565b50505050505050565b60408051600080825260208201909252610f8b85858584611c54565b91505b509392505050565b50600190565b6000610fc77fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b612411565b905090565b6000610fc77febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e612411565b81816110038282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146110b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae78585856000612303565b60008060006110d284610f96565b60408051808201909152601281527f5245434f5645525f444953414c4c4f5745440000000000000000000000000000602082015290151561116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611178610d9c565b925061118383612419565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5073ffffffffffffffffffffffffffffffffffffffff8416151561128b576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611285573d6000803e3d6000fd5b5061137b565b50826112b373ffffffffffffffffffffffffffffffffffffffff82163063ffffffff61245316565b91506112dc73ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61258c16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611379576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080600080600160008060006113fe8c8c8c611da9565b815260208082019290925260409081016000908120548452918301939093529101902080548690811061142d57fe5b60009182526020909120015460ff8082169a61010083049091169950620100009091047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16975095505050505050565b6000806114866108d1565b15156114955760009150610f8e565b61149d611c11565b905073ffffffffffffffffffffffffffffffffffffffff811615156114c55760009150610f8e565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef91068630876114ed8861261b565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b8381101561158557818101518382015260200161156d565b50505050905090810190601f1680156115b25780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156115d457600080fd5b505af11580156115e8573d6000803e3d6000fd5b505050506040513d60208110156115fe57600080fd5b505195945050505050565b600080611614611c11565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b158015610d6a57600080fd5b60001981565b81816116dd8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610bba60008585611d12565b81816117a98282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff16331461185c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae7858585611d12565b6000600260006118788585612625565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff169392505050565b604080516000808252602082019092527f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a916118e6913391849190610936565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611983576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50838360006119928383611868565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e41474552000000000000000000000000815250901515611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610f6687878787612719565b611a5d610fcc565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611b02612750565b611b0a611c11565b60408051808201909152601481527f41434c5f415554485f494e49545f4b45524e454c00000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611bea81307f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a82612719565b50565b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381565b6000610fc77f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b612411565b6000600019611c49610fcc565b14905090565b600181565b6000806000806000611c67898989611da9565b815260208101919091526040016000205491508115801590611c915750611c918288888888610c3e565b15611c9f5760019250611cee565b600080611caf6000198989611da9565b815260208101919091526040016000205490508015801590611cdb5750611cdb81600019888888610c3e565b15611ce95760019250611cee565b600092505b5050949350505050565b6000610c82858585611d098661282f565b611c54565b4390565b8260026000611d218585612625565b815260208101919091526040908101600090812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559051858316928492908616917ff3addc8b8e25ee11528a61b0e65092cae0666ef0ec0c64cb303993c88d689b4d9190a4505050565b604080517f5045524d495353494f4e000000000000000000000000000000000000000000006020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8088168202602a850152861602603e8301526052808301859052835180840390910181526072909201928390528151600093918291908401908083835b60208310611e7457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e37565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b6000611eb2612dde565b600088815260016020526040812054819063ffffffff8a1610611ed857600093506120e4565b60008a8152600160205260409020805463ffffffff8b16908110611ef857fe5b600091825260209182902060408051606081018252929091015460ff8082168085526101008304909116948401949094526201000090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690820152935060cc1415611f7257611f6b838b8a8a8a8a6128f0565b93506120e4565b50604082015182517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091169060ff1660cb1415611fd557611fb9836040015189898989612ac3565b611fc4576000611fc7565b60015b60ff16915060019050612093565b825160ff1660c81415611ff157611fea611d0e565b9150612093565b825160ff1660c9141561200657611fea612c36565b825160ff1660cd141561203f5782604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169150612093565b8451835160ff161061205457600093506120e4565b82518551869160ff1690811061206657fe5b906020019060200201517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1691505b6007836020015160ff16600c8111156120a857fe5b600c8111156120b357fe5b14156120c4576000821193506120e4565b6120e182846020015160ff16600c8111156120db57fe5b83612c3a565b93505b5050509695505050505050565b6000806000806000612101612dde565b8660405160200180828051906020019060200280838360005b8381101561213257818101518382015260200161211a565b505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061219857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161215b565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260019092529290208054929950975050151591506122f8905057600092505b86518310156122f85786838151811015156121fb57fe5b90602001906020020151915060606040519081016040528061221c84612cf7565b60ff16815260200161222d84612d1d565b60ff90811682527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858116602093840152875460018082018a5560008a81528590208651920180549587015160408801517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909716938616939093177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010093909516929092029390931761ffff1662010000949092169390930217909155939093019290506121e4565b509295945050505050565b60008082600080612315898989611da9565b8152602081019190915260400160002055821580159250829061235857507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5638314155b6040805184151581529051919250859173ffffffffffffffffffffffffffffffffffffffff80891692908a16917f759b9a74d5354b5801710a0c1b283cc9f0d32b607ac8ced10c83ac8e75c77d529181900360200190a4801561240957604080518481529051859173ffffffffffffffffffffffffffffffffffffffff80891692908a16917f8dfee25d92d73b8c9b868f9fa3e215cc1981033f426e53803e3da4f09a2cfc30919081900360200190a45b505050505050565b5490565b5490565b60008073ffffffffffffffffffffffffffffffffffffffff83161515612442576000915061244d565b823b90506000811191505b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905260009081806124e08684612d42565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515612582576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090610f8b8582612d73565b8051602002815290565b604080517f524f4c45000000000000000000000000000000000000000000000000000000006020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff86160260248301526038808301859052835180840390910181526058909201928390528151600093918291908401908083835b602083106126e657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016126a9565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b6127458484847f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563612303565b610bba818484611d12565b612758610fcc565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156127f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5061282d612800611d0e565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff612dc116565b565b606060006020835181151561284057fe5b049050806020028351146040805190810160405280601a81526020017f434f4e56455253494f4e5f494d50524f5045525f4c454e4754480000000000008152509015156128e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5082525090565b60008080808080808080600c8f6020015160ff16600c81111561290f57fe5b600c81111561291a57fe5b14156129855761294d8f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612dc5565b919950975095506129628e898f8f8f8f611ea8565b945061297e8e866129735787612975565b885b8f8f8f8f611ea8565b9850612ab1565b6129b28f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612dc5565b5090945092506129c68e858f8f8f8f611ea8565b915060088f6020015160ff16600c8111156129dd57fe5b600c8111156129e857fe5b14156129f75781159850612ab1565b818015612a215750600a8f6020015160ff16600c811115612a1457fe5b600c811115612a1f57fe5b145b15612a2f5760019850612ab1565b81158015612a5a575060098f6020015160ff16600c811115612a4d57fe5b600c811115612a5857fe5b145b15612a685760009850612ab1565b612a768e848f8f8f8f611ea8565b9050600b8f6020015160ff16600c811115612a8d57fe5b600c811115612a9857fe5b1415612aad5780151582151514159850612ab1565b8098505b50505050505050509695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301908152908516604483015260648201849052608060848301908152835160a484015283516000937f2a1510900000000000000000000000000000000000000000000000000000000093606093869384938493849389938f938f938f938f939192909160c490910190602080860191028083838d5b83811015612b6e578181015183820152602001612b56565b5050505090500195505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050945061753093506000808651602088018f88fa9250821515612bfe5760009650612c27565b3d915060208214612c125760009650612c27565b604051826000823e8051915060008152508096505b50505050505095945050505050565b4290565b6000600183600c811115612c4a57fe5b1415612c595750828114610c37565b600283600c811115612c6757fe5b1415612c77575082811415610c37565b600383600c811115612c8557fe5b1415612c945750808311610c37565b600483600c811115612ca257fe5b1415612cb15750808310610c37565b600583600c811115612cbf57fe5b1415612ccf575080831015610c37565b600683600c811115612cdd57fe5b1415612ced575080831115610c37565b5060009392505050565b7f0100000000000000000000000000000000000000000000000000000000000000900490565b7e01000000000000000000000000000000000000000000000000000000000000900490565b6000806000806040516020818751602089018a5afa92506000831115612d6757805191505b50909590945092505050565b6000806040516020818551602087016000895af16000811115612db7573d8015612da45760208114612dad57612db5565b60019350612db5565b600183511493505b505b5090949350505050565b9055565b9064010000000082049068010000000000000000830490565b6040805160608101825260008082526020820181905291810191909152905600a165627a7a723058205a13e185d04c4794e877b26e3ca356a02e941874fde5a45ea93ada078b220cc30029ebb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e",
  "deployedBytecode": "0x6080604052600436106101955763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461019a5780630808343e146101c357806309699ff5146101f65780630a8ed3db1461022757806315949ed71461025e5780631b5e75be146102a75780631d63ff2b146103295780632914b9bd1461033e57806332f0a3b5146103c05780633d6ab68f146103d55780636815c992146103ea5780636d6712d81461046b5780637e7db6e1146104a257806380afdea8146104d05780638b3dd749146104e55780639d0effdb146104fa5780639d4941d814610531578063a03c58321461055f578063a1658fad146105dd578063a479e50814610651578063a5ed8bf814610666578063a885508a1461067b578063afd925df146106ac578063b1905727146106e3578063be03847814610714578063c4d66de814610752578063c513f66e14610780578063d4aae0c414610795578063de4796ed146107aa578063f516bc0e146107bf578063f520b58d146107d4578063fdef910614610855575b600080fd5b3480156101a657600080fd5b506101af6108d1565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166024356108fa565b005b34801561020257600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043516602435610aee565b34801561023357600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610bc0565b34801561026a57600080fd5b5061029573ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610bfc565b60408051918252519081900360200190f35b3480156102b357600080fd5b5060408051602060046084358181013583810280860185019096528085526101af958335956024803573ffffffffffffffffffffffffffffffffffffffff9081169760443590911696606435963696919560a495949091019282919085019084908082843750949750610c3e9650505050505050565b34801561033557600080fd5b50610295610c8b565b34801561034a57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610397943694929360249392840191908190840183828082843750949750610c909650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103cc57600080fd5b50610397610d9c565b3480156103e157600080fd5b50610295610e3a565b3480156103f657600080fd5b5060408051606435600481810135602081810285810182019096528185526101f49573ffffffffffffffffffffffffffffffffffffffff84358116966024803590921696604435963696909560849593949290920192909182919085019084908082843750949750610e5e9650505050505050565b34801561047757600080fd5b506101af73ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610f6f565b3480156104ae57600080fd5b506101af73ffffffffffffffffffffffffffffffffffffffff60043516610f96565b3480156104dc57600080fd5b50610295610f9c565b3480156104f157600080fd5b50610295610fcc565b34801561050657600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610ff7565b34801561053d57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166110c4565b34801561056b57600080fd5b5061059973ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356064356113e6565b6040805160ff94851681529290931660208301527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168183015290519081900360600190f35b3480156105e957600080fd5b5060408051602060046044358181013583810280860185019096528085526101af95833573ffffffffffffffffffffffffffffffffffffffff1695602480359636969560649593949201929182918501908490808284375094975061147b9650505050505050565b34801561065d57600080fd5b50610397611609565b34801561067257600080fd5b506103976116cb565b34801561068757600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff600435166024356116d1565b3480156106b857600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561179d565b3480156106ef57600080fd5b5061039773ffffffffffffffffffffffffffffffffffffffff60043516602435611868565b34801561072057600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043581169060243581169060443590606435166118a6565b34801561075e57600080fd5b506101f473ffffffffffffffffffffffffffffffffffffffff60043516611a55565b34801561078c57600080fd5b50610295611bed565b3480156107a157600080fd5b50610397611c11565b3480156107b657600080fd5b506101af611c3c565b3480156107cb57600080fd5b50610397611c4f565b3480156107e057600080fd5b5060408051606435600481810135602081810285810182019096528185526101af9573ffffffffffffffffffffffffffffffffffffffff84358116966024803590921696604435963696909560849593949290920192909182919085019084908082843750949750611c549650505050505050565b34801561086157600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101af9473ffffffffffffffffffffffffffffffffffffffff8135811695602480359092169560443595369560849401918190840183828082843750949750611cf89650505050505050565b6000806108dc610fcc565b905080158015906108f45750806108f1611d0e565b10155b91505090565b604080516000808252602082019092527f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a9161093c9133918491905b5061147b565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610a15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109da5781810151838201526020016109c2565b50505050905090810190601f168015610a075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082826000610a248383611868565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e41474552000000000000000000000000815250901515610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae760018686611d12565b5050505050565b8181610afa8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610bba60018585611d12565b50505050565b610bf78383836000604051908082528060200260200182016040528015610bf1578160200160208202803883390190505b50610e5e565b505050565b600060016000806000610c10888888611da9565b81526020808201929092526040908101600090812054845291830193909352910190205490505b9392505050565b60007f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563861415610c7057506001610c82565b610c7f86600087878787611ea8565b90505b95945050505050565b600081565b6000610c9a611609565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b505192915050565b6000610da6611c11565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b505050506040513d6020811015610e3357600080fd5b5051905090565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a81565b60008383610e6c8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b506000845111610f4f577f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563610f58565b610f58846120f1565b9250610f6687878786612303565b50505050505050565b60408051600080825260208201909252610f8b85858584611c54565b91505b509392505050565b50600190565b6000610fc77fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b612411565b905090565b6000610fc77febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e612411565b81816110038282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146110b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae78585856000612303565b60008060006110d284610f96565b60408051808201909152601281527f5245434f5645525f444953414c4c4f5745440000000000000000000000000000602082015290151561116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611178610d9c565b925061118383612419565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5073ffffffffffffffffffffffffffffffffffffffff8416151561128b576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611285573d6000803e3d6000fd5b5061137b565b50826112b373ffffffffffffffffffffffffffffffffffffffff82163063ffffffff61245316565b91506112dc73ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61258c16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611379576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080600080600160008060006113fe8c8c8c611da9565b815260208082019290925260409081016000908120548452918301939093529101902080548690811061142d57fe5b60009182526020909120015460ff8082169a61010083049091169950620100009091047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16975095505050505050565b6000806114866108d1565b15156114955760009150610f8e565b61149d611c11565b905073ffffffffffffffffffffffffffffffffffffffff811615156114c55760009150610f8e565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef91068630876114ed8861261b565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b8381101561158557818101518382015260200161156d565b50505050905090810190601f1680156115b25780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156115d457600080fd5b505af11580156115e8573d6000803e3d6000fd5b505050506040513d60208110156115fe57600080fd5b505195945050505050565b600080611614611c11565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b158015610d6a57600080fd5b60001981565b81816116dd8282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610bba60008585611d12565b81816117a98282611868565b60408051808201909152601381527f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff16331461185c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610ae7858585611d12565b6000600260006118788585612625565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff169392505050565b604080516000808252602082019092527f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a916118e6913391849190610936565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611983576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50838360006119928383611868565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e41474552000000000000000000000000815250901515611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50610f6687878787612719565b611a5d610fcc565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611b02612750565b611b0a611c11565b60408051808201909152601481527f41434c5f415554485f494e49545f4b45524e454c00000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b50611bea81307f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a82612719565b50565b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381565b6000610fc77f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b612411565b6000600019611c49610fcc565b14905090565b600181565b6000806000806000611c67898989611da9565b815260208101919091526040016000205491508115801590611c915750611c918288888888610c3e565b15611c9f5760019250611cee565b600080611caf6000198989611da9565b815260208101919091526040016000205490508015801590611cdb5750611cdb81600019888888610c3e565b15611ce95760019250611cee565b600092505b5050949350505050565b6000610c82858585611d098661282f565b611c54565b4390565b8260026000611d218585612625565b815260208101919091526040908101600090812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559051858316928492908616917ff3addc8b8e25ee11528a61b0e65092cae0666ef0ec0c64cb303993c88d689b4d9190a4505050565b604080517f5045524d495353494f4e000000000000000000000000000000000000000000006020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8088168202602a850152861602603e8301526052808301859052835180840390910181526072909201928390528151600093918291908401908083835b60208310611e7457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e37565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b6000611eb2612dde565b600088815260016020526040812054819063ffffffff8a1610611ed857600093506120e4565b60008a8152600160205260409020805463ffffffff8b16908110611ef857fe5b600091825260209182902060408051606081018252929091015460ff8082168085526101008304909116948401949094526201000090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690820152935060cc1415611f7257611f6b838b8a8a8a8a6128f0565b93506120e4565b50604082015182517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091169060ff1660cb1415611fd557611fb9836040015189898989612ac3565b611fc4576000611fc7565b60015b60ff16915060019050612093565b825160ff1660c81415611ff157611fea611d0e565b9150612093565b825160ff1660c9141561200657611fea612c36565b825160ff1660cd141561203f5782604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169150612093565b8451835160ff161061205457600093506120e4565b82518551869160ff1690811061206657fe5b906020019060200201517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1691505b6007836020015160ff16600c8111156120a857fe5b600c8111156120b357fe5b14156120c4576000821193506120e4565b6120e182846020015160ff16600c8111156120db57fe5b83612c3a565b93505b5050509695505050505050565b6000806000806000612101612dde565b8660405160200180828051906020019060200280838360005b8381101561213257818101518382015260200161211a565b505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061219857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161215b565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260019092529290208054929950975050151591506122f8905057600092505b86518310156122f85786838151811015156121fb57fe5b90602001906020020151915060606040519081016040528061221c84612cf7565b60ff16815260200161222d84612d1d565b60ff90811682527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858116602093840152875460018082018a5560008a81528590208651920180549587015160408801517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909716938616939093177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010093909516929092029390931761ffff1662010000949092169390930217909155939093019290506121e4565b509295945050505050565b60008082600080612315898989611da9565b8152602081019190915260400160002055821580159250829061235857507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5638314155b6040805184151581529051919250859173ffffffffffffffffffffffffffffffffffffffff80891692908a16917f759b9a74d5354b5801710a0c1b283cc9f0d32b607ac8ced10c83ac8e75c77d529181900360200190a4801561240957604080518481529051859173ffffffffffffffffffffffffffffffffffffffff80891692908a16917f8dfee25d92d73b8c9b868f9fa3e215cc1981033f426e53803e3da4f09a2cfc30919081900360200190a45b505050505050565b5490565b5490565b60008073ffffffffffffffffffffffffffffffffffffffff83161515612442576000915061244d565b823b90506000811191505b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905260009081806124e08684612d42565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515612582576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090610f8b8582612d73565b8051602002815290565b604080517f524f4c45000000000000000000000000000000000000000000000000000000006020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff86160260248301526038808301859052835180840390910181526058909201928390528151600093918291908401908083835b602083106126e657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016126a9565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b6127458484847f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563612303565b610bba818484611d12565b612758610fcc565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156127f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5061282d612800611d0e565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff612dc116565b565b606060006020835181151561284057fe5b049050806020028351146040805190810160405280601a81526020017f434f4e56455253494f4e5f494d50524f5045525f4c454e4754480000000000008152509015156128e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156109da5781810151838201526020016109c2565b5082525090565b60008080808080808080600c8f6020015160ff16600c81111561290f57fe5b600c81111561291a57fe5b14156129855761294d8f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612dc5565b919950975095506129628e898f8f8f8f611ea8565b945061297e8e866129735787612975565b885b8f8f8f8f611ea8565b9850612ab1565b6129b28f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612dc5565b5090945092506129c68e858f8f8f8f611ea8565b915060088f6020015160ff16600c8111156129dd57fe5b600c8111156129e857fe5b14156129f75781159850612ab1565b818015612a215750600a8f6020015160ff16600c811115612a1457fe5b600c811115612a1f57fe5b145b15612a2f5760019850612ab1565b81158015612a5a575060098f6020015160ff16600c811115612a4d57fe5b600c811115612a5857fe5b145b15612a685760009850612ab1565b612a768e848f8f8f8f611ea8565b9050600b8f6020015160ff16600c811115612a8d57fe5b600c811115612a9857fe5b1415612aad5780151582151514159850612ab1565b8098505b50505050505050509695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff85811660248301908152908516604483015260648201849052608060848301908152835160a484015283516000937f2a1510900000000000000000000000000000000000000000000000000000000093606093869384938493849389938f938f938f938f939192909160c490910190602080860191028083838d5b83811015612b6e578181015183820152602001612b56565b5050505090500195505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050945061753093506000808651602088018f88fa9250821515612bfe5760009650612c27565b3d915060208214612c125760009650612c27565b604051826000823e8051915060008152508096505b50505050505095945050505050565b4290565b6000600183600c811115612c4a57fe5b1415612c595750828114610c37565b600283600c811115612c6757fe5b1415612c77575082811415610c37565b600383600c811115612c8557fe5b1415612c945750808311610c37565b600483600c811115612ca257fe5b1415612cb15750808310610c37565b600583600c811115612cbf57fe5b1415612ccf575080831015610c37565b600683600c811115612cdd57fe5b1415612ced575080831115610c37565b5060009392505050565b7f0100000000000000000000000000000000000000000000000000000000000000900490565b7e01000000000000000000000000000000000000000000000000000000000000900490565b6000806000806040516020818751602089018a5afa92506000831115612d6757805191505b50909590945092505050565b6000806040516020818551602087016000895af16000811115612db7573d8015612da45760208114612dad57612db5565b60019350612db5565b600183511493505b505b5090949350505050565b9055565b9064010000000082049068010000000000000000830490565b6040805160608101825260008082526020820181905291810191909152905600a165627a7a723058205a13e185d04c4794e877b26e3ca356a02e941874fde5a45ea93ada078b220cc30029",
  "sourceMap": "293:19076:13:-;;;344:9:24;:7;;;;:9;:::i;:::-;293:19076:13;;590:84:34;615:24:32;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;607:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;637:30:34;-1:-1:-1;;637:13:34;;;;:30;:::i;:::-;590:84::o;881:137:32:-;936:7;962:49;-1:-1:-1;;;;;;;;;;;962:47:32;;;;;;:49;:::i;:::-;955:56;;881:137;:::o;1751:141::-;615:24;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:32;-1:-1:-1;1824:61:32;-1:-1:-1;;;;;;;;;;;1872:12:32;1824:47;;;;;;:61;:::i;:::-;1751:141;:::o;519:134:39:-;630:15;;620:27::o;1028:119::-;1117:22;;1115:26::o;293:19076:13:-;;;;;;;",
  "deployedSourceMap": "293:19076:13:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1128:208:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1128:208:32;;;;;;;;;;;;;;;;;;;;;;8512:225:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8512:225:13;;;;;;;;;;;9014:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9014:188:13;;;;;;;;;5610:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5610:165:13;;;;;;;;;;;;;;9510:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9510:208:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12153:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12153:339:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12153:339:13;;-1:-1:-1;12153:339:13;;-1:-1:-1;;;;;;;12153:339:13;1598:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1598:50:13;;;;795:179:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;795:179:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;795:179:42;;-1:-1:-1;795:179:42;;-1:-1:-1;;;;;;;795:179:42;;;;;;;;;;;;;;;;;;;;2253:229:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2253:229:23;;;;494:116:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;494:116:13;;;;6336:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6336:309:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6336:309:13;;-1:-1:-1;6336:309:13;;-1:-1:-1;;;;;;;6336:309:13;11936:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11936:211:13;;;;;;;;;;;;;;1659:99:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1659:99:40;;;;;;;796:106:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:106:22;;;;881:137:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;881:137:32;;;;7087:204:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7087:204:13;;;;;;;;;;;;;;836:623:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;836:623:40;;;;;;;10064:325:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10064:325:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1641:496:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1641:496:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1641:496:23;;-1:-1:-1;1641:496:23;;-1:-1:-1;;;;;;;1641:496:23;980:231:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;980:231:42;;;;1654:48:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1654:48:13;;;;8033:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8033:189:13;;;;;;;;;7599:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7599:208:13;;;;;;;;;;;;;;10601:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10601:153:13;;;;;;;;;4854:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4854:256:13;;;;;;;;;;;;;;;;;;;;3512:270;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3512:270:13;;;;;;;1483:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1483:109:13;;;;674:116:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;674:116:22;;;;287:117:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:117:34;;;;1708:48:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1708:48:13;;;;11355:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11355:575:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11355:575:13;;-1:-1:-1;11355:575:13;;-1:-1:-1;;;;;;;11355:575:13;11120:229;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11120:229:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11120:229:13;;-1:-1:-1;11120:229:13;;-1:-1:-1;;;;;;;11120:229:13;1128:208:32;1175:4;1191:27;1221:24;:22;:24::i;:::-;1191:54;-1:-1:-1;1262:24:32;;;;;:67;;;1310:19;1290:16;:14;:16::i;:::-;:39;;1262:67;1255:74;;1128:208;;:::o;8512:225:13:-;1020:16:23;;;1034:1;1020:16;;;;;;;;;544:66:13;;990:47:23;;1001:10;;544:66:13;;1020:16:23;;;990:10;:47::i;:::-;1039:17;;;;;;;;;;;;;;;;;;982:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;982:75:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8656:4:13;8662:5;3133:1;3088:33;8656:4;8662:5;3088:20;:33::i;:::-;:47;;;3137:22;;;;;;;;;;;;;;;;;;3080:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3080:80:13;;8683:47;1754:1;8718:4;8724:5;8683:21;:47::i;:::-;1067:1:23;;8512:225:13;;;:::o;9014:188::-;9121:4;9127:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:13;;9148:47;1754:1;9183:4;9189:5;9148:21;:47::i;:::-;9014:188;;;;:::o;5610:165::-;5712:56;5729:7;5738:4;5744:5;5765:1;5751:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;5751:16:13;;5712;:56::i;:::-;5610:165;;;:::o;9510:208::-;9614:4;9637:16;:67;9654:11;:49;9666:36;9681:7;9690:4;9696:5;9666:14;:36::i;:::-;9654:49;;;;;;;;;;;;;;;;;;;9637:67;;;;;;;;;;;;;:74;;-1:-1:-1;9510:208:13;;;;;;:::o;12153:339::-;12322:4;1526:66;12346:31;;12342:73;;;-1:-1:-1;12400:4:13;12393:11;;12342:73;12432:53;12443:11;12456:1;12459:4;12465:6;12473:5;12480:4;12432:10;:53::i;:::-;12425:60;;12153:339;;;;;;;;:::o;1598:50::-;1646:1;1598:50;:::o;795:179:42:-;861:18;917:22;:20;:22::i;:::-;:40;;;958:7;917:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;917:49:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;917:49:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;917:49:42;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;917:49:42;;795:179;-1:-1:-1;;795:179:42:o;2253:229:23:-;2302:7;2408:8;:6;:8::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2408:27:23;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2408:27:23;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2408:27:23;;-1:-1:-1;2253:229:23;:::o;494:116:13:-;544:66;494:116;:::o;6336:309::-;6499:18;6472:4;6478:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:13;;6537:1;6520:7;:14;:18;:60;;1526:66;6520:60;;;6541:20;6553:7;6541:11;:20::i;:::-;6499:81;;6590:48;6605:7;6614:4;6620:5;6627:10;6590:14;:48::i;:::-;6336:309;;;;;;;:::o;11936:211::-;12066:16;;;12025:4;12066:16;;;;;;;;;12099:41;12113:4;12119:6;12127:5;12134;12099:13;:41::i;:::-;12092:48;;11936:211;;;;;;;:::o;1659:99:40:-;-1:-1:-1;1747:4:40;;1659:99::o;796:106:22:-;834:7;860:35;601:66;860:33;:35::i;:::-;853:42;;796:106;:::o;881:137:32:-;936:7;962:49;345:66;962:47;:49::i;7087:204:13:-;7206:4;7212:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:13;-1:-1:-1;7233:51:13;7248:7;7257:4;7263:5;1646:1;7233:14;:51::i;836:623:40:-;960:13;1067:15;1224:11;904:27;924:6;904:19;:27::i;:::-;933:16;;;;;;;;;;;;;;;;;;896:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;896:54:40;;976:18;:16;:18::i;:::-;960:34;;1012:17;1023:5;1012:10;:17::i;:::-;1031:24;;;;;;;;;;;;;;;;;;1004:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1004:52:40;-1:-1:-1;1096:13:40;;;;1092:307;;;1170:23;;1143:4;1135:21;;-1:-1:-1;1135:21:40;1170:14;;;:23;;;;;1135:21;;1170:23;;;;1135:21;1170:14;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1170:23:40;1092:307;;;-1:-1:-1;1244:6:40;1275:27;:21;;;1297:4;1275:27;:21;:27;:::i;:::-;1265:37;-1:-1:-1;1324:34:40;:18;;;1343:5;1265:37;1324:34;:18;:34;:::i;:::-;1360:27;;;;;;;;;;;;;;;;;;1316:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1316:72:40;;1092:307;1436:6;1414:38;;1429:5;1414:38;;;1444:7;1414:38;;;;;;;;;;;;;;;;;;836:623;;;;:::o;10064:325:13:-;10198:5;10205;10212:7;10235:19;10257:16;:67;10274:11;:49;10286:36;10301:7;10310:4;10316:5;10286:14;:36::i;:::-;10274:49;;;;;;;;;;;;;;;;;;;10257:67;;;;;;;;;;;;;:75;;10325:6;;10257:75;;;;;;;;;;;;;;;10350:8;;;;;;;10360;;;;;;-1:-1:-1;10370:11:13;;;;;;;-1:-1:-1;10064:325:13;-1:-1:-1;;;;;;10064:325:13:o;1641:496:23:-;1733:4;1819:20;1754:16;:14;:16::i;:::-;1753:17;1749:60;;;1793:5;1786:12;;;;1749:60;1842:8;:6;:8::i;:::-;1819:31;-1:-1:-1;1864:35:23;;;;1860:78;;;1922:5;1915:12;;;;1860:78;1955:12;:26;;;1995:7;2024:4;2043:5;2062:58;2112:7;2062:49;:58::i;:::-;1955:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1955:175:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1955:175:23;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1955:175:23;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1955:175:23;;1641:496;-1:-1:-1;;;;;1641:496:23:o;980:231:42:-;1033:18;1063:20;1086:8;:6;:8::i;:::-;:69;;;;;;1368:66:53;1086:69:42;;;;330:66:44;1086:69:42;;;;;;:15;;;;;;;;:69;;;;;;;;;;;;;;;;:15;:69;;;5:2:-1;;;;30:1;27;20:12;1654:48:13;-1:-1:-1;;1654:48:13;:::o;8033:189::-;8142:4;8148:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:13;;8169:46;8199:1;8203:4;8209:5;8169:21;:46::i;7599:208::-;7726:4;7732:5;2847:33;2868:4;2874:5;2847:20;:33::i;:::-;2882:21;;;;;;;;;;;;;;;;;;2833:47;;:10;:47;2825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2825:79:13;;7753:47;7775:11;7788:4;7794:5;7753:21;:47::i;10601:153::-;10681:7;10707:17;:40;10725:21;10734:4;10740:5;10725:8;:21::i;:::-;10707:40;;;;;;;;;;;-1:-1:-1;10707:40:13;;;;;10601:153;-1:-1:-1;;;10601:153:13:o;4854:256::-;1020:16:23;;;1034:1;1020:16;;;;;;;;;544:66:13;;990:47:23;;1001:10;;544:66:13;;1020:16:23;;;990:47;1039:17;;;;;;;;;;;;;;;;;;982:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;982:75:23;-1:-1:-1;5027:4:13;5033:5;3133:1;3088:33;5027:4;5033:5;3088:20;:33::i;:::-;:47;;;3137:22;;;;;;;;;;;;;;;;;;3080:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3080:80:13;;5054:49;5072:7;5081:4;5087:5;5094:8;5054:17;:49::i;3512:270::-;615:24:32;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:32;;3587:13:13;:11;:13::i;:::-;3640:8;:6;:8::i;:::-;3651:22;;;;;;;;;;;;;;;;;;3618:31;;:10;:31;3610:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3610:64:13;-1:-1:-1;3685:90:13;3703:19;3724:4;544:66;3703:19;3685:17;:90::i;:::-;3512:270;:::o;1483:109::-;1526:66;1483:109;:::o;674:116:22:-;713:7;747:35;485:66;747:33;:35::i;287:117:34:-;331:4;-1:-1:-1;;354:24:34;:22;:24::i;:::-;:43;347:50;;287:117;:::o;1708:48:13:-;1754:1;1708:48;:::o;11355:575::-;11467:4;11483:17;11691;11503:11;:48;11515:35;11530:4;11536:6;11544:5;11515:14;:35::i;:::-;11503:48;;;;;;;;;;;;;;;-1:-1:-1;11565:26:13;;;;;:78;;;11595:48;11606:9;11617:4;11623:6;11631:5;11638:4;11595:10;:48::i;:::-;11561:120;;;11666:4;11659:11;;;;11561:120;11711:11;:54;11723:41;-1:-1:-1;;11750:6:13;11758:5;11723:14;:41::i;:::-;11711:54;;;;;;;;;;;;;;;-1:-1:-1;11779:26:13;;;;;:84;;;11809:54;11820:9;-1:-1:-1;;11843:6:13;11851:5;11858:4;11809:10;:54::i;:::-;11775:126;;;11886:4;11879:11;;;;11775:126;11918:5;11911:12;;11355:575;;;;;;;;;:::o;11120:229::-;11228:4;11251:91;11265:4;11271:6;11279:5;11286:55;11336:4;11286:49;:55::i;:::-;11251:13;:91::i;347:94:37:-;422:12;347:94;:::o;18788:225:13:-;18931:11;18888:17;:40;18906:21;18915:4;18921:5;18906:8;:21::i;:::-;18888:40;;;;;;;;;;;;;-1:-1:-1;18888:40:13;;;:54;;;;;;;;;;;18957:49;;;;;;18987:5;;18957:49;;;;;;-1:-1:-1;18957:49:13;18788:225;;;:::o;19180:187::-;19308:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;19308:51:13;;;;;;;;19298:62;;19272:7;;19308:51;;;19298:62;;;;;19308:51;19298:62;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;19298:62:13;;;;;;;;;;;;-1:-1:-1;;;;;;;19180:187:13:o;14064:1414::-;14260:4;14398:18;;:::i;:::-;14603:13;14296:29;;;:16;:29;;;;;:36;14603:13;;14284:48;;;;14280:108;;14355:5;14348:12;;;;14280:108;14419:29;;;;:16;:29;;;;;:39;;;;;;;;;;;;;;;;;;;;;14398:60;;;;;;;;14419:39;;;;14398:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1256:3:13;14473:29;14469:124;;;14525:57;14536:5;14543:11;14556:4;14562:6;14570:5;14577:4;14525:10;:57::i;:::-;14518:64;;;;14469:124;-1:-1:-1;14655:11:13;;;;14703:8;;14647:20;;;;;14703:27;;1199:3;14703:27;14699:627;;;14754:63;14777:5;:11;;;14791:4;14797:6;14805:5;14812:4;14754:11;:63::i;:::-;:71;;14824:1;14754:71;;;14820:1;14754:71;14746:79;;;;14852:1;14839:14;;14699:627;;;14874:8;;:33;;1064:3;14874:33;14870:456;;;14931:16;:14;:16::i;:::-;14923:24;;14870:456;;;14968:8;;:30;;1121:3;14968:30;14964:362;;;15022:14;:12;:14::i;14964:362::-;15057:8;;:32;;1313:3;15057:32;15053:273;;;15121:5;:11;;;15113:20;;15105:28;;15053:273;;;15180:11;;15168:8;;:23;;;15164:74;;15218:5;15211:12;;;;15164:74;15280:8;;15275:14;;:4;;:14;;;;;;;;;;;;;;;;;15259:32;;15251:40;;15053:273;15356:6;15343:5;:8;;;15340:12;;;;;;;;;;:22;;;;;;;;;15336:78;;;15402:1;15393:5;15385:18;15378:25;;;;15336:78;15431:40;15439:5;15449;:8;;;15446:12;;;;;;;;;;15460:10;15431:7;:40::i;:::-;15424:47;;14064:1414;;;;;;;;;;;;:::o;13444:614::-;13509:7;13528:17;13601:22;13734:9;13799:20;13857:18;;:::i;:::-;13575:14;13558:32;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13558:32:13;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13558:32:13;;;13548:43;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;13548:43:13;;;;;;;;;;;;;-1:-1:-1;13626:27:13;;;274:1:-1;13626:27:13;;;;;;13668:13;;13548:43;;-1:-1:-1;13626:27:13;-1:-1:-1;;13668:18:13;13664:361;;-1:-1:-1;13664:361:13;;-1:-1:-1;13664:361:13;13746:1;13734:13;;13729:286;13753:14;:21;13749:1;:25;13729:286;;;13822:14;13837:1;13822:17;;;;;;;;;;;;;;;;;;13799:40;;13878:86;;;;;;;;;13884:27;13898:12;13884:13;:27::i;:::-;13878:86;;;;;;13913:27;13927:12;13913:13;:27::i;:::-;13878:86;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;13982:18:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13776:3;;;;;13982:18;-1:-1:-1;13729:286:13;;;-1:-1:-1;14042:9:13;;13444:614;-1:-1:-1;;;;;13444:614:13:o;12912:526::-;13095:24;13160;13074:11;13022;:49;13034:36;13049:7;13058:4;13064:5;13034:14;:36::i;:::-;13022:49;;;;;;;;;;;;;:63;13122:28;;;;;-1:-1:-1;13122:28:13;;13187:54;;-1:-1:-1;1526:66:13;13210:31;;;13187:54;13257:56;;;;;;;;;;13160:81;;-1:-1:-1;13286:5:13;;13257:56;;;;;;;;;;;;;;;;;;13327:19;13323:109;;;13367:54;;;;;;;;13402:5;;13367:54;;;;;;;;;;;;;;;;;;;13323:109;12912:526;;;;;;:::o;379:134:39:-;490:15;;480:27::o;519:134::-;630:15;;620:27::o;426:244:33:-;486:4;;506:21;;;;502:64;;;550:5;543:12;;;;502:64;629:7;617:20;609:28;;662:1;655:4;:8;648:15;;426:244;;;;;:::o;4578:403:36:-;4708:91;;;4744:16;4708:91;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4708:91:36;;;;;;;;25:18:-1;;61:17;;4708:91:36;182:15:-1;4744:25:36;179:29:-1;160:49;;4656:7:36;;;;4849:39;4744:6;4708:91;4849:12;:39::i;:::-;4915:28;;;;;;;;;;;;;;;;;4810:78;;-1:-1:-1;4810:78:36;-1:-1:-1;4898:46:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4898:46:36;-1:-1:-1;4962:12:36;4578:403;-1:-1:-1;;;;;4578:403:36:o;3100:304::-;3232:101;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3232:101:36;;;;;;;;25:18:-1;;61:17;;3232:101:36;182:15:-1;3268:17:36;179:29:-1;160:49;;3184:4:36;;3350:47;3372:6;3232:101;3350:21;:47::i;142:539:25:-;559:13;;575:2;559:18;639:26;;559:6;596:79::o;19019:155:13:-;19127:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;19127:39:13;;;;;;;;19117:50;;19091:7;;19127:39;;;19117:50;;;;;19127:39;19117:50;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;19117:50:13;;;;;;;;;;;;-1:-1:-1;;;;;;19019:155:13:o;12598:225::-;12708:54;12723:7;12732:4;12738:5;1526:66;12708:14;:54::i;:::-;12772:44;12794:8;12804:4;12810:5;12772:21;:44::i;1447:123:32:-;615:24;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:32;;1498;1546:16;:14;:16::i;:::-;345:66;;1498:65;:47;:65;:::i;:::-;1447:123::o;687:612:25:-;772:23;1081:18;1118:2;1102:6;:13;:18;;;;;;;;1081:39;;1155:10;1168:2;1155:15;1138:6;:13;:32;1172:21;;;;;;;;;;;;;;;;;;1130:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1130:64:25;-1:-1:-1;1257:26:25;;-1:-1:-1;1238:6:25;1214:79::o;15484:1304:13:-;15647:4;;;;;;;;;15688:10;15674:6;:9;;;15671:13;;;;;;;;;;:27;;;;;;;;;15667:450;;;15863:39;15888:6;:12;;;15880:21;;15863:16;:39::i;:::-;15816:86;;-1:-1:-1;15816:86:13;-1:-1:-1;15816:86:13;-1:-1:-1;15930:66:13;15941:11;15816:86;15970:4;15976:6;15984:5;15991:4;15930:10;:66::i;:::-;15916:80;;16018:88;16029:11;16042:6;:36;;16066:12;16042:36;;;16051:12;16042:36;16080:4;16086:6;16094:5;16101:4;16018:10;:88::i;:::-;16011:95;;;;15667:450;16194:39;16219:6;:12;;;16211:21;;16194:16;:39::i;:::-;-1:-1:-1;16174:59:13;;-1:-1:-1;16174:59:13;-1:-1:-1;16253:58:13;16264:11;16174:59;16285:4;16291:6;16299:5;16306:4;16253:10;:58::i;:::-;16243:68;-1:-1:-1;16343:6:13;16329;:9;;;16326:13;;;;;;;;;;:23;;;;;;;;;16322:64;;;16373:2;16372:3;16365:10;;;;16322:64;16400:2;:28;;;;-1:-1:-1;16423:5:13;16409:6;:9;;;16406:13;;;;;;;;;;:22;;;;;;;;;16400:28;16396:70;;;16451:4;16444:11;;;;16396:70;16481:2;16480:3;:30;;;;-1:-1:-1;16504:6:13;16490;:9;;;16487:13;;;;;;;;;;:23;;;;;;;;;16480:30;16476:73;;;16533:5;16526:12;;;;16476:73;16569:58;16580:11;16593:6;16601:4;16607:6;16615:5;16622:4;16569:10;:58::i;:::-;16559:68;-1:-1:-1;16659:6:13;16645;:9;;;16642:13;;;;;;;;;;:23;;;;;;;;;16638:69;;;16694:2;16688:8;;:2;:8;;;;16681:15;;;;16638:69;16724:2;16717:9;;15484:1304;;;;;;;;;;;;;;;;;:::o;17525:1192::-;17854:54;;17683:22;17854:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17654:4;;17683:31;;17825:26;;17654:4;;;;;;;;17683:31;;17882:4;;17888:6;;17896:5;;17903:4;;17854:54;;;;;;;;;;;;;;;;;;17654:4;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;17854:54:13;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17854:54:13;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;17854:54:13;17825:83;;1865:5;17918:41;;18107:1;18104;18088:13;18082:20;18075:4;18060:13;18056:24;18043:11;18027:14;18016:93;18010:99;;18134:2;18133:3;18129:46;;;18159:5;18152:12;;;;18129:46;18226:14;;-1:-1:-1;18263:2:13;18255:10;;18251:53;;18288:5;18281:12;;;;18251:53;18375:4;18369:11;18450:4;18447:1;18442:3;18427:28;18523:3;18517:10;18507:20;;18601:1;18596:3;18589:14;18344:343;18704:6;18697:13;;17525:1192;;;;;;;;;;;;;;:::o;926:144:37:-;999:15;926:144;:::o;16794:725:13:-;16866:4;16893:5;16886:3;:12;;;;;;;;;16882:34;;;-1:-1:-1;16908:8:13;;;16901:15;;16882:34;16996:6;16989:3;:13;;;;;;;;;16985:34;;;-1:-1:-1;17011:8:13;;;;17004:15;;16985:34;17099:5;17092:3;:12;;;;;;;;;17088:33;;;-1:-1:-1;17114:7:13;;;17107:14;;17088:33;17202:5;17195:3;:12;;;;;;;;;17191:33;;;-1:-1:-1;17217:7:13;;;17210:14;;17191:33;17305:6;17298:3;:13;;;;;;;;;17294:34;;;-1:-1:-1;17320:8:13;;;;17313:15;;17294:34;17408:6;17401:3;:13;;;;;;;;;17397:34;;;-1:-1:-1;17423:8:13;;;;17416:15;;17397:34;-1:-1:-1;17507:5:13;16794:725;;;;;:::o;2662:112:14:-;2752:14;;;;2662:112::o;2544:::-;2634:14;;;;2544:112::o;2148:774:36:-;2255:4;2261:7;2284:12;2306:11;2367:4;2361:11;2741:4;2670:3;2619:9;2613:16;2572:4;2561:9;2557:20;2508:5;2451:3;2423:371;2412:382;;2823:1;2814:7;2811:14;2808:2;;;2857:3;2851:10;2844:17;;2808:2;-1:-1:-1;2902:7:36;;2911:3;;-1:-1:-1;2148:774:36;-1:-1:-1;;;2148:774:36:o;800:1342::-;903:4;923:8;981:4;975:11;1403:4;1332:3;1281:9;1275:16;1234:4;1223:9;1219:20;1169:1;1120:5;1063:3;1041:415;1485:1;1476:7;1473:14;1470:2;;;1587:14;1672:55;;;;1806:4;1801:193;;;;1580:512;;1672:55;1708:1;1701:8;;1672:55;;1801:193;1974:1;1968:3;1962:10;1959:17;1952:24;;1580:512;;1470:2;-1:-1:-1;2132:3:36;;800:1342;-1:-1:-1;;;;800:1342:36:o;1028:119:39:-;1117:22;;1115:26::o;2780:192:14:-;2892:2;2916:13;;;;2951;;;;2780:192::o;293:19076:13:-;;;;;;;;;-1:-1:-1;293:19076:13;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity 0.4.24;\n\nimport \"../apps/AragonApp.sol\";\nimport \"../common/ConversionHelpers.sol\";\nimport \"../common/TimeHelpers.sol\";\nimport \"./ACLSyntaxSugar.sol\";\nimport \"./IACL.sol\";\nimport \"./IACLOracle.sol\";\n\n\n/* solium-disable function-order */\n// Allow public initialize() to be first\ncontract ACL is IACL, TimeHelpers, AragonApp, ACLHelpers {\n    /* Hardcoded constants to save gas\n    bytes32 public constant CREATE_PERMISSIONS_ROLE = keccak256(\"CREATE_PERMISSIONS_ROLE\");\n    */\n    bytes32 public constant CREATE_PERMISSIONS_ROLE = 0x0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a;\n\n    enum Op { NONE, EQ, NEQ, GT, LT, GTE, LTE, RET, NOT, AND, OR, XOR, IF_ELSE } // op types\n\n    struct Param {\n        uint8 id;\n        uint8 op;\n        uint240 value; // even though value is an uint240 it can store addresses\n        // in the case of 32 byte hashes losing 2 bytes precision isn't a huge deal\n        // op and id take less than 1 byte each so it can be kept in 1 sstore\n    }\n\n    uint8 internal constant BLOCK_NUMBER_PARAM_ID = 200;\n    uint8 internal constant TIMESTAMP_PARAM_ID    = 201;\n    // 202 is unused\n    uint8 internal constant ORACLE_PARAM_ID       = 203;\n    uint8 internal constant LOGIC_OP_PARAM_ID     = 204;\n    uint8 internal constant PARAM_VALUE_PARAM_ID  = 205;\n    // TODO: Add execution times param type?\n\n    /* Hardcoded constant to save gas\n    bytes32 public constant EMPTY_PARAM_HASH = keccak256(uint256(0));\n    */\n    bytes32 public constant EMPTY_PARAM_HASH = 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563;\n    bytes32 public constant NO_PERMISSION = bytes32(0);\n    address public constant ANY_ENTITY = address(-1);\n    address public constant BURN_ENTITY = address(1); // address(0) is already used as \"no permission manager\"\n\n    uint256 internal constant ORACLE_CHECK_GAS = 30000;\n\n    string private constant ERROR_AUTH_INIT_KERNEL = \"ACL_AUTH_INIT_KERNEL\";\n    string private constant ERROR_AUTH_NO_MANAGER = \"ACL_AUTH_NO_MANAGER\";\n    string private constant ERROR_EXISTENT_MANAGER = \"ACL_EXISTENT_MANAGER\";\n\n    // Whether someone has a permission\n    mapping (bytes32 => bytes32) internal permissions; // permissions hash => params hash\n    mapping (bytes32 => Param[]) internal permissionParams; // params hash => params\n\n    // Who is the manager of a permission\n    mapping (bytes32 => address) internal permissionManager;\n\n    event SetPermission(address indexed entity, address indexed app, bytes32 indexed role, bool allowed);\n    event SetPermissionParams(address indexed entity, address indexed app, bytes32 indexed role, bytes32 paramsHash);\n    event ChangePermissionManager(address indexed app, bytes32 indexed role, address indexed manager);\n\n    modifier onlyPermissionManager(address _app, bytes32 _role) {\n        require(msg.sender == getPermissionManager(_app, _role), ERROR_AUTH_NO_MANAGER);\n        _;\n    }\n\n    modifier noPermissionManager(address _app, bytes32 _role) {\n        // only allow permission creation (or re-creation) when there is no manager\n        require(getPermissionManager(_app, _role) == address(0), ERROR_EXISTENT_MANAGER);\n        _;\n    }\n\n    /**\n    * @dev Initialize can only be called once. It saves the block number in which it was initialized.\n    * @notice Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions\n    * @param _permissionsCreator Entity that will be given permission over createPermission\n    */\n    function initialize(address _permissionsCreator) public onlyInit {\n        initialized();\n        require(msg.sender == address(kernel()), ERROR_AUTH_INIT_KERNEL);\n\n        _createPermission(_permissionsCreator, this, CREATE_PERMISSIONS_ROLE, _permissionsCreator);\n    }\n\n    /**\n    * @dev Creates a permission that wasn't previously set and managed.\n    *      If a created permission is removed it is possible to reset it with createPermission.\n    *      This is the **ONLY** way to create permissions and set managers to permissions that don't\n    *      have a manager.\n    *      In terms of the ACL being initialized, this function implicitly protects all the other\n    *      state-changing external functions, as they all require the sender to be a manager.\n    * @notice Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    * @param _manager Address of the entity that will be able to grant and revoke the permission further.\n    */\n    function createPermission(address _entity, address _app, bytes32 _role, address _manager)\n        external\n        auth(CREATE_PERMISSIONS_ROLE)\n        noPermissionManager(_app, _role)\n    {\n        _createPermission(_entity, _app, _role, _manager);\n    }\n\n    /**\n    * @dev Grants permission if allowed. This requires `msg.sender` to be the permission manager\n    * @notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    */\n    function grantPermission(address _entity, address _app, bytes32 _role)\n        external\n    {\n        grantPermissionP(_entity, _app, _role, new uint256[](0));\n    }\n\n    /**\n    * @dev Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager\n    * @notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    * @param _params Permission parameters\n    */\n    function grantPermissionP(address _entity, address _app, bytes32 _role, uint256[] _params)\n        public\n        onlyPermissionManager(_app, _role)\n    {\n        bytes32 paramsHash = _params.length > 0 ? _saveParams(_params) : EMPTY_PARAM_HASH;\n        _setPermission(_entity, _app, _role, paramsHash);\n    }\n\n    /**\n    * @dev Revokes permission if allowed. This requires `msg.sender` to be the the permission manager\n    * @notice Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`\n    * @param _entity Address of the whitelisted entity to revoke access from\n    * @param _app Address of the app in which the role will be revoked\n    * @param _role Identifier for the group of actions in app being revoked\n    */\n    function revokePermission(address _entity, address _app, bytes32 _role)\n        external\n        onlyPermissionManager(_app, _role)\n    {\n        _setPermission(_entity, _app, _role, NO_PERMISSION);\n    }\n\n    /**\n    * @notice Set `_newManager` as the manager of `_role` in `_app`\n    * @param _newManager Address for the new manager\n    * @param _app Address of the app in which the permission management is being transferred\n    * @param _role Identifier for the group of actions being transferred\n    */\n    function setPermissionManager(address _newManager, address _app, bytes32 _role)\n        external\n        onlyPermissionManager(_app, _role)\n    {\n        _setPermissionManager(_newManager, _app, _role);\n    }\n\n    /**\n    * @notice Remove the manager of `_role` in `_app`\n    * @param _app Address of the app in which the permission is being unmanaged\n    * @param _role Identifier for the group of actions being unmanaged\n    */\n    function removePermissionManager(address _app, bytes32 _role)\n        external\n        onlyPermissionManager(_app, _role)\n    {\n        _setPermissionManager(address(0), _app, _role);\n    }\n\n    /**\n    * @notice Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n    * @param _app Address of the app in which the permission is being burned\n    * @param _role Identifier for the group of actions being burned\n    */\n    function createBurnedPermission(address _app, bytes32 _role)\n        external\n        auth(CREATE_PERMISSIONS_ROLE)\n        noPermissionManager(_app, _role)\n    {\n        _setPermissionManager(BURN_ENTITY, _app, _role);\n    }\n\n    /**\n    * @notice Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n    * @param _app Address of the app in which the permission is being burned\n    * @param _role Identifier for the group of actions being burned\n    */\n    function burnPermissionManager(address _app, bytes32 _role)\n        external\n        onlyPermissionManager(_app, _role)\n    {\n        _setPermissionManager(BURN_ENTITY, _app, _role);\n    }\n\n    /**\n     * @notice Get parameters for permission array length\n     * @param _entity Address of the whitelisted entity that will be able to perform the role\n     * @param _app Address of the app\n     * @param _role Identifier for a group of actions in app\n     * @return Length of the array\n     */\n    function getPermissionParamsLength(address _entity, address _app, bytes32 _role) external view returns (uint) {\n        return permissionParams[permissions[permissionHash(_entity, _app, _role)]].length;\n    }\n\n    /**\n    * @notice Get parameter for permission\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app\n    * @param _role Identifier for a group of actions in app\n    * @param _index Index of parameter in the array\n    * @return Parameter (id, op, value)\n    */\n    function getPermissionParam(address _entity, address _app, bytes32 _role, uint _index)\n        external\n        view\n        returns (uint8, uint8, uint240)\n    {\n        Param storage param = permissionParams[permissions[permissionHash(_entity, _app, _role)]][_index];\n        return (param.id, param.op, param.value);\n    }\n\n    /**\n    * @dev Get manager for permission\n    * @param _app Address of the app\n    * @param _role Identifier for a group of actions in app\n    * @return address of the manager for the permission\n    */\n    function getPermissionManager(address _app, bytes32 _role) public view returns (address) {\n        return permissionManager[roleHash(_app, _role)];\n    }\n\n    /**\n    * @dev Function called by apps to check ACL on kernel or to check permission statu\n    * @param _who Sender of the original call\n    * @param _where Address of the app\n    * @param _where Identifier for a group of actions in app\n    * @param _how Permission parameters\n    * @return boolean indicating whether the ACL allows the role or not\n    */\n    function hasPermission(address _who, address _where, bytes32 _what, bytes memory _how) public view returns (bool) {\n        return hasPermission(_who, _where, _what, ConversionHelpers.dangerouslyCastBytesToUintArray(_how));\n    }\n\n    function hasPermission(address _who, address _where, bytes32 _what, uint256[] memory _how) public view returns (bool) {\n        bytes32 whoParams = permissions[permissionHash(_who, _where, _what)];\n        if (whoParams != NO_PERMISSION && evalParams(whoParams, _who, _where, _what, _how)) {\n            return true;\n        }\n\n        bytes32 anyParams = permissions[permissionHash(ANY_ENTITY, _where, _what)];\n        if (anyParams != NO_PERMISSION && evalParams(anyParams, ANY_ENTITY, _where, _what, _how)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    function hasPermission(address _who, address _where, bytes32 _what) public view returns (bool) {\n        uint256[] memory empty = new uint256[](0);\n        return hasPermission(_who, _where, _what, empty);\n    }\n\n    function evalParams(\n        bytes32 _paramsHash,\n        address _who,\n        address _where,\n        bytes32 _what,\n        uint256[] _how\n    ) public view returns (bool)\n    {\n        if (_paramsHash == EMPTY_PARAM_HASH) {\n            return true;\n        }\n\n        return _evalParam(_paramsHash, 0, _who, _where, _what, _how);\n    }\n\n    /**\n    * @dev Internal createPermission for access inside the kernel (on instantiation)\n    */\n    function _createPermission(address _entity, address _app, bytes32 _role, address _manager) internal {\n        _setPermission(_entity, _app, _role, EMPTY_PARAM_HASH);\n        _setPermissionManager(_manager, _app, _role);\n    }\n\n    /**\n    * @dev Internal function called to actually save the permission\n    */\n    function _setPermission(address _entity, address _app, bytes32 _role, bytes32 _paramsHash) internal {\n        permissions[permissionHash(_entity, _app, _role)] = _paramsHash;\n        bool entityHasPermission = _paramsHash != NO_PERMISSION;\n        bool permissionHasParams = entityHasPermission && _paramsHash != EMPTY_PARAM_HASH;\n\n        emit SetPermission(_entity, _app, _role, entityHasPermission);\n        if (permissionHasParams) {\n            emit SetPermissionParams(_entity, _app, _role, _paramsHash);\n        }\n    }\n\n    function _saveParams(uint256[] _encodedParams) internal returns (bytes32) {\n        bytes32 paramHash = keccak256(abi.encodePacked(_encodedParams));\n        Param[] storage params = permissionParams[paramHash];\n\n        if (params.length == 0) { // params not saved before\n            for (uint256 i = 0; i < _encodedParams.length; i++) {\n                uint256 encodedParam = _encodedParams[i];\n                Param memory param = Param(decodeParamId(encodedParam), decodeParamOp(encodedParam), uint240(encodedParam));\n                params.push(param);\n            }\n        }\n\n        return paramHash;\n    }\n\n    function _evalParam(\n        bytes32 _paramsHash,\n        uint32 _paramId,\n        address _who,\n        address _where,\n        bytes32 _what,\n        uint256[] _how\n    ) internal view returns (bool)\n    {\n        if (_paramId >= permissionParams[_paramsHash].length) {\n            return false; // out of bounds\n        }\n\n        Param memory param = permissionParams[_paramsHash][_paramId];\n\n        if (param.id == LOGIC_OP_PARAM_ID) {\n            return _evalLogic(param, _paramsHash, _who, _where, _what, _how);\n        }\n\n        uint256 value;\n        uint256 comparedTo = uint256(param.value);\n\n        // get value\n        if (param.id == ORACLE_PARAM_ID) {\n            value = checkOracle(IACLOracle(param.value), _who, _where, _what, _how) ? 1 : 0;\n            comparedTo = 1;\n        } else if (param.id == BLOCK_NUMBER_PARAM_ID) {\n            value = getBlockNumber();\n        } else if (param.id == TIMESTAMP_PARAM_ID) {\n            value = getTimestamp();\n        } else if (param.id == PARAM_VALUE_PARAM_ID) {\n            value = uint256(param.value);\n        } else {\n            if (param.id >= _how.length) {\n                return false;\n            }\n            value = uint256(uint240(_how[param.id])); // force lost precision\n        }\n\n        if (Op(param.op) == Op.RET) {\n            return uint256(value) > 0;\n        }\n\n        return compare(value, Op(param.op), comparedTo);\n    }\n\n    function _evalLogic(Param _param, bytes32 _paramsHash, address _who, address _where, bytes32 _what, uint256[] _how)\n        internal\n        view\n        returns (bool)\n    {\n        if (Op(_param.op) == Op.IF_ELSE) {\n            uint32 conditionParam;\n            uint32 successParam;\n            uint32 failureParam;\n\n            (conditionParam, successParam, failureParam) = decodeParamsList(uint256(_param.value));\n            bool result = _evalParam(_paramsHash, conditionParam, _who, _where, _what, _how);\n\n            return _evalParam(_paramsHash, result ? successParam : failureParam, _who, _where, _what, _how);\n        }\n\n        uint32 param1;\n        uint32 param2;\n\n        (param1, param2,) = decodeParamsList(uint256(_param.value));\n        bool r1 = _evalParam(_paramsHash, param1, _who, _where, _what, _how);\n\n        if (Op(_param.op) == Op.NOT) {\n            return !r1;\n        }\n\n        if (r1 && Op(_param.op) == Op.OR) {\n            return true;\n        }\n\n        if (!r1 && Op(_param.op) == Op.AND) {\n            return false;\n        }\n\n        bool r2 = _evalParam(_paramsHash, param2, _who, _where, _what, _how);\n\n        if (Op(_param.op) == Op.XOR) {\n            return r1 != r2;\n        }\n\n        return r2; // both or and and depend on result of r2 after checks\n    }\n\n    function compare(uint256 _a, Op _op, uint256 _b) internal pure returns (bool) {\n        if (_op == Op.EQ)  return _a == _b;                              // solium-disable-line lbrace\n        if (_op == Op.NEQ) return _a != _b;                              // solium-disable-line lbrace\n        if (_op == Op.GT)  return _a > _b;                               // solium-disable-line lbrace\n        if (_op == Op.LT)  return _a < _b;                               // solium-disable-line lbrace\n        if (_op == Op.GTE) return _a >= _b;                              // solium-disable-line lbrace\n        if (_op == Op.LTE) return _a <= _b;                              // solium-disable-line lbrace\n        return false;\n    }\n\n    function checkOracle(IACLOracle _oracleAddr, address _who, address _where, bytes32 _what, uint256[] _how) internal view returns (bool) {\n        bytes4 sig = _oracleAddr.canPerform.selector;\n\n        // a raw call is required so we can return false if the call reverts, rather than reverting\n        bytes memory checkCalldata = abi.encodeWithSelector(sig, _who, _where, _what, _how);\n        uint256 oracleCheckGas = ORACLE_CHECK_GAS;\n\n        bool ok;\n        assembly {\n            ok := staticcall(oracleCheckGas, _oracleAddr, add(checkCalldata, 0x20), mload(checkCalldata), 0, 0)\n        }\n\n        if (!ok) {\n            return false;\n        }\n\n        uint256 size;\n        assembly { size := returndatasize }\n        if (size != 32) {\n            return false;\n        }\n\n        bool result;\n        assembly {\n            let ptr := mload(0x40)       // get next free memory ptr\n            returndatacopy(ptr, 0, size) // copy return from above `staticcall`\n            result := mload(ptr)         // read data at ptr and set it to result\n            mstore(ptr, 0)               // set pointer memory to 0 so it still is the next free ptr\n        }\n\n        return result;\n    }\n\n    /**\n    * @dev Internal function that sets management\n    */\n    function _setPermissionManager(address _newManager, address _app, bytes32 _role) internal {\n        permissionManager[roleHash(_app, _role)] = _newManager;\n        emit ChangePermissionManager(_app, _role, _newManager);\n    }\n\n    function roleHash(address _where, bytes32 _what) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(\"ROLE\", _where, _what));\n    }\n\n    function permissionHash(address _who, address _where, bytes32 _what) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(\"PERMISSION\", _who, _where, _what));\n    }\n}\n",
  "sourcePath": "@aragon/os/contracts/acl/ACL.sol",
  "ast": {
    "absolutePath": "@aragon/os/contracts/acl/ACL.sol",
    "exportedSymbols": {
      "ACL": [
        9152
      ]
    },
    "id": 9153,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7859,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:13"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "../apps/AragonApp.sol",
        "id": 7860,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 10490,
        "src": "25:31:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/ConversionHelpers.sol",
        "file": "../common/ConversionHelpers.sol",
        "id": 7861,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 10553,
        "src": "57:41:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/TimeHelpers.sol",
        "file": "../common/TimeHelpers.sol",
        "id": 7862,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 11201,
        "src": "99:35:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/ACLSyntaxSugar.sol",
        "file": "./ACLSyntaxSugar.sol",
        "id": 7863,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 9653,
        "src": "135:30:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACL.sol",
        "file": "./IACL.sol",
        "id": 7864,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 9674,
        "src": "166:20:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACLOracle.sol",
        "file": "./IACLOracle.sol",
        "id": 7865,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 9691,
        "src": "187:26:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7866,
              "name": "IACL",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9673,
              "src": "309:4:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IACL_$9673",
                "typeString": "contract IACL"
              }
            },
            "id": 7867,
            "nodeType": "InheritanceSpecifier",
            "src": "309:4:13"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7868,
              "name": "TimeHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11200,
              "src": "315:11:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeHelpers_$11200",
                "typeString": "contract TimeHelpers"
              }
            },
            "id": 7869,
            "nodeType": "InheritanceSpecifier",
            "src": "315:11:13"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7870,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10489,
              "src": "328:9:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$10489",
                "typeString": "contract AragonApp"
              }
            },
            "id": 7871,
            "nodeType": "InheritanceSpecifier",
            "src": "328:9:13"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7872,
              "name": "ACLHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9652,
              "src": "339:10:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ACLHelpers_$9652",
                "typeString": "contract ACLHelpers"
              }
            },
            "id": 7873,
            "nodeType": "InheritanceSpecifier",
            "src": "339:10:13"
          }
        ],
        "contractDependencies": [
          9577,
          9652,
          9673,
          10365,
          10489,
          10502,
          10662,
          10712,
          10810,
          10838,
          10871,
          10908,
          11200,
          11422,
          11823,
          11850,
          13114
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 9152,
        "linearizedBaseContracts": [
          9152,
          9652,
          10489,
          9577,
          11823,
          13114,
          11850,
          10908,
          11422,
          10838,
          10662,
          10712,
          10502,
          10871,
          10810,
          11200,
          10365,
          9673
        ],
        "name": "ACL",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 7876,
            "name": "CREATE_PERMISSIONS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "494:116:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7874,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "494:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307830623731396233336338336238653564333030633532316362386235346165396264393333393936613134626566386332663465303238356432643234303061",
              "id": 7875,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "544:66:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5176166219463878559501968259997826055329110201998247721302853912956666789898_by_1",
                "typeString": "int_const 5176...(68 digits omitted)...9898"
              },
              "value": "0x0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "ACL.Op",
            "id": 7890,
            "members": [
              {
                "id": 7877,
                "name": "NONE",
                "nodeType": "EnumValue",
                "src": "627:4:13"
              },
              {
                "id": 7878,
                "name": "EQ",
                "nodeType": "EnumValue",
                "src": "633:2:13"
              },
              {
                "id": 7879,
                "name": "NEQ",
                "nodeType": "EnumValue",
                "src": "637:3:13"
              },
              {
                "id": 7880,
                "name": "GT",
                "nodeType": "EnumValue",
                "src": "642:2:13"
              },
              {
                "id": 7881,
                "name": "LT",
                "nodeType": "EnumValue",
                "src": "646:2:13"
              },
              {
                "id": 7882,
                "name": "GTE",
                "nodeType": "EnumValue",
                "src": "650:3:13"
              },
              {
                "id": 7883,
                "name": "LTE",
                "nodeType": "EnumValue",
                "src": "655:3:13"
              },
              {
                "id": 7884,
                "name": "RET",
                "nodeType": "EnumValue",
                "src": "660:3:13"
              },
              {
                "id": 7885,
                "name": "NOT",
                "nodeType": "EnumValue",
                "src": "665:3:13"
              },
              {
                "id": 7886,
                "name": "AND",
                "nodeType": "EnumValue",
                "src": "670:3:13"
              },
              {
                "id": 7887,
                "name": "OR",
                "nodeType": "EnumValue",
                "src": "675:2:13"
              },
              {
                "id": 7888,
                "name": "XOR",
                "nodeType": "EnumValue",
                "src": "679:3:13"
              },
              {
                "id": 7889,
                "name": "IF_ELSE",
                "nodeType": "EnumValue",
                "src": "684:7:13"
              }
            ],
            "name": "Op",
            "nodeType": "EnumDefinition",
            "src": "617:76:13"
          },
          {
            "canonicalName": "ACL.Param",
            "id": 7897,
            "members": [
              {
                "constant": false,
                "id": 7892,
                "name": "id",
                "nodeType": "VariableDeclaration",
                "scope": 7897,
                "src": "734:8:13",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 7891,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "734:5:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7894,
                "name": "op",
                "nodeType": "VariableDeclaration",
                "scope": 7897,
                "src": "752:8:13",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 7893,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "752:5:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7896,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 7897,
                "src": "770:13:13",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint240",
                  "typeString": "uint240"
                },
                "typeName": {
                  "id": 7895,
                  "name": "uint240",
                  "nodeType": "ElementaryTypeName",
                  "src": "770:7:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Param",
            "nodeType": "StructDefinition",
            "scope": 9152,
            "src": "711:299:13",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7900,
            "name": "BLOCK_NUMBER_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1016:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7898,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1016:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323030",
              "id": 7899,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1064:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_200_by_1",
                "typeString": "int_const 200"
              },
              "value": "200"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7903,
            "name": "TIMESTAMP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1073:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7901,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1073:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323031",
              "id": 7902,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1121:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_201_by_1",
                "typeString": "int_const 201"
              },
              "value": "201"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7906,
            "name": "ORACLE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1151:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7904,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1151:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323033",
              "id": 7905,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1199:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_203_by_1",
                "typeString": "int_const 203"
              },
              "value": "203"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7909,
            "name": "LOGIC_OP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1208:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7907,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1208:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323034",
              "id": 7908,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1256:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_204_by_1",
                "typeString": "int_const 204"
              },
              "value": "204"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7912,
            "name": "PARAM_VALUE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1265:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7910,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1265:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323035",
              "id": 7911,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1313:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_205_by_1",
                "typeString": "int_const 205"
              },
              "value": "205"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7915,
            "name": "EMPTY_PARAM_HASH",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1483:109:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7913,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1483:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307832393064656364393534386236326138643630333435613938383338366663383462613662633935343834303038663633363266393331363065663365353633",
              "id": 7914,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1526:66:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18569430475105882587588266137607568536673111973893317399460219858819262702947_by_1",
                "typeString": "int_const 1856...(69 digits omitted)...2947"
              },
              "value": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7920,
            "name": "NO_PERMISSION",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1598:50:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7916,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1598:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "30",
                  "id": 7918,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1646:1:13",
                  "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": 7917,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1638:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": "bytes32"
              },
              "id": 7919,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1638:10:13",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7926,
            "name": "ANY_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1654:48:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7921,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1654:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 7924,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1699:2:13",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 7923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1700:1:13",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 7922,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1691:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 7925,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1691:11:13",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7931,
            "name": "BURN_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1708:48:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7927,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1708:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 7929,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1754:1:13",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  },
                  "value": "1"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  }
                ],
                "id": 7928,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1746:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 7930,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1746:10:13",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7934,
            "name": "ORACLE_CHECK_GAS",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1820:50:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 7932,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1820:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3330303030",
              "id": 7933,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1865:5:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_30000_by_1",
                "typeString": "int_const 30000"
              },
              "value": "30000"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7937,
            "name": "ERROR_AUTH_INIT_KERNEL",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1877:71:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 7935,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1877:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f494e49545f4b45524e454c",
              "id": 7936,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1926:22:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b821e30579b9561be7f0b7b902ba336b331e39831108d09772a61766a2b465fb",
                "typeString": "literal_string \"ACL_AUTH_INIT_KERNEL\""
              },
              "value": "ACL_AUTH_INIT_KERNEL"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 7940,
            "name": "ERROR_AUTH_NO_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1954:69:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 7938,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1954:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f4e4f5f4d414e41474552",
              "id": 7939,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2002:21:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e2d6e781abad74150d786cba50506e9dd4199308c8c71d28e79e0e9232faf41e",
                "typeString": "literal_string \"ACL_AUTH_NO_MANAGER\""
              },
              "value": "ACL_AUTH_NO_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 7943,
            "name": "ERROR_EXISTENT_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "2029:71:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 7941,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2029:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f4558495354454e545f4d414e41474552",
              "id": 7942,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2078:22:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4c0d68e0b4f86bab649749fdab1e22b7429153357a2704a5fd7b646a35ecc4d0",
                "typeString": "literal_string \"ACL_EXISTENT_MANAGER\""
              },
              "value": "ACL_EXISTENT_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 7947,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "2147:49:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
              "typeString": "mapping(bytes32 => bytes32)"
            },
            "typeName": {
              "id": 7946,
              "keyType": {
                "id": 7944,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2156:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2147:28:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                "typeString": "mapping(bytes32 => bytes32)"
              },
              "valueType": {
                "id": 7945,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2167:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 7952,
            "name": "permissionParams",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "2237:54:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
              "typeString": "mapping(bytes32 => struct ACL.Param[])"
            },
            "typeName": {
              "id": 7951,
              "keyType": {
                "id": 7948,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2246:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2237:28:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                "typeString": "mapping(bytes32 => struct ACL.Param[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 7949,
                  "name": "Param",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 7897,
                  "src": "2257:5:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                    "typeString": "struct ACL.Param"
                  }
                },
                "id": 7950,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2257:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                  "typeString": "struct ACL.Param[]"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 7956,
            "name": "permissionManager",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "2365:55:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 7955,
              "keyType": {
                "id": 7953,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2374:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2365:28:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 7954,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2385:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7966,
            "name": "SetPermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7958,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 7966,
                  "src": "2447:22:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7957,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2447:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7960,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 7966,
                  "src": "2471:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7959,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2471:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7962,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 7966,
                  "src": "2492:20:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7961,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2492:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7964,
                  "indexed": false,
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 7966,
                  "src": "2514:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7963,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2514:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2446:81:13"
            },
            "src": "2427:101:13"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7976,
            "name": "SetPermissionParams",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7968,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 7976,
                  "src": "2559:22:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7967,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2559:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7970,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 7976,
                  "src": "2583:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7969,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2583:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7972,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 7976,
                  "src": "2604:20:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7971,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2604:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7974,
                  "indexed": false,
                  "name": "paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 7976,
                  "src": "2626:18:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7973,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2626:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2558:87:13"
            },
            "src": "2533:113:13"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7984,
            "name": "ChangePermissionManager",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7978,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 7984,
                  "src": "2681:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7977,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2681:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7980,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 7984,
                  "src": "2702:20:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7979,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2702:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7982,
                  "indexed": true,
                  "name": "manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 7984,
                  "src": "2724:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2724:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2680:68:13"
            },
            "src": "2651:98:13"
          },
          {
            "body": {
              "id": 8002,
              "nodeType": "Block",
              "src": "2815:107:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7991,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "2833:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 7992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2833:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7994,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7986,
                              "src": "2868:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7995,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7988,
                              "src": "2874:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 7993,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8315,
                            "src": "2847:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 7996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2847:33:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2833:47:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7998,
                        "name": "ERROR_AUTH_NO_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7940,
                        "src": "2882:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 7990,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "2825:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2825:79:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8000,
                  "nodeType": "ExpressionStatement",
                  "src": "2825:79:13"
                },
                {
                  "id": 8001,
                  "nodeType": "PlaceholderStatement",
                  "src": "2914:1:13"
                }
              ]
            },
            "documentation": null,
            "id": 8003,
            "name": "onlyPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7986,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8003,
                  "src": "2786:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7985,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2786:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7988,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8003,
                  "src": "2800:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7987,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2800:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2785:29:13"
            },
            "src": "2755:167:13",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8022,
              "nodeType": "Block",
              "src": "2986:192:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8011,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8005,
                              "src": "3109:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8012,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8007,
                              "src": "3115:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8010,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8315,
                            "src": "3088:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 8013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3088:33:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8015,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3133:1:13",
                              "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": 8014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3125:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3125:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3088:47:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8018,
                        "name": "ERROR_EXISTENT_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7943,
                        "src": "3137:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 8009,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "3080:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3080:80:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8020,
                  "nodeType": "ExpressionStatement",
                  "src": "3080:80:13"
                },
                {
                  "id": 8021,
                  "nodeType": "PlaceholderStatement",
                  "src": "3170:1:13"
                }
              ]
            },
            "documentation": null,
            "id": 8023,
            "name": "noPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8005,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8023,
                  "src": "2957:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8004,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2957:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8007,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8023,
                  "src": "2971:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8006,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2971:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2956:29:13"
            },
            "src": "2928:250:13",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8051,
              "nodeType": "Block",
              "src": "3577:205:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8030,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10795,
                      "src": "3587:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3587:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8032,
                  "nodeType": "ExpressionStatement",
                  "src": "3587:13:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8040,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8034,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "3618:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3618:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 8037,
                                "name": "kernel",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10328,
                                "src": "3640:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IKernel_$12600_$",
                                  "typeString": "function () view returns (contract IKernel)"
                                }
                              },
                              "id": 8038,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3640:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKernel_$12600",
                                "typeString": "contract IKernel"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IKernel_$12600",
                                "typeString": "contract IKernel"
                              }
                            ],
                            "id": 8036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3632:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3632:17:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3618:31:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8041,
                        "name": "ERROR_AUTH_INIT_KERNEL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7937,
                        "src": "3651:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 8033,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "3610:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3610:64:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8043,
                  "nodeType": "ExpressionStatement",
                  "src": "3610:64:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8045,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "3703:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8046,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15248,
                        "src": "3724:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$9152",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8047,
                        "name": "CREATE_PERMISSIONS_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7876,
                        "src": "3730:23:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8048,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "3755:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$9152",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8044,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8493,
                      "src": "3685:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 8049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3685:90:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8050,
                  "nodeType": "ExpressionStatement",
                  "src": "3685:90:13"
                }
              ]
            },
            "documentation": "@dev Initialize can only be called once. It saves the block number in which it was initialized.\n@notice Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions\n@param _permissionsCreator Entity that will be given permission over createPermission",
            "id": 8052,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 8028,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8027,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10742,
                  "src": "3568:8:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3568:8:13"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8026,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8025,
                  "name": "_permissionsCreator",
                  "nodeType": "VariableDeclaration",
                  "scope": 8052,
                  "src": "3532:27:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8024,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3532:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3531:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8029,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3577:0:13"
            },
            "scope": 9152,
            "src": "3512:270:13",
            "stateMutability": "nonpayable",
            "superFunction": 9659,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8077,
              "nodeType": "Block",
              "src": "5044:66:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8071,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8054,
                        "src": "5072:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8072,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8056,
                        "src": "5081:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8073,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8058,
                        "src": "5087:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8074,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8060,
                        "src": "5094:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8070,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8493,
                      "src": "5054:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 8075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5054:49:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8076,
                  "nodeType": "ExpressionStatement",
                  "src": "5054:49:13"
                }
              ]
            },
            "documentation": "@dev Creates a permission that wasn't previously set and managed.\n     If a created permission is removed it is possible to reset it with createPermission.\n     This is the **ONLY** way to create permissions and set managers to permissions that don't\n     have a manager.\n     In terms of the ACL being initialized, this function implicitly protects all the other\n     state-changing external functions, as they all require the sender to be a manager.\n@notice Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform\n@param _manager Address of the entity that will be able to grant and revoke the permission further.",
            "id": 8078,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8063,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7876,
                    "src": "4974:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8064,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8062,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10409,
                  "src": "4969:4:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4969:29:13"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8066,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8056,
                    "src": "5027:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8067,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8058,
                    "src": "5033:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8068,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8065,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8023,
                  "src": "5007:19:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5007:32:13"
              }
            ],
            "name": "createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8054,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "4880:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8053,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4880:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8056,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "4897:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8055,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4897:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8058,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "4911:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8057,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4911:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8060,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "4926:16:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4926:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4879:64:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8069,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5044:0:13"
            },
            "scope": 9152,
            "src": "4854:256:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8098,
              "nodeType": "Block",
              "src": "5702:73:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8088,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8080,
                        "src": "5729:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8089,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8082,
                        "src": "5738:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8090,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8084,
                        "src": "5744:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5765:1:13",
                            "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": 8093,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "5751:13:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (uint256[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 8091,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5755:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8092,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "5755:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 8095,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5751:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8087,
                      "name": "grantPermissionP",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8135,
                      "src": "5712:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,bytes32,uint256[] memory)"
                      }
                    },
                    "id": 8096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5712:56:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8097,
                  "nodeType": "ExpressionStatement",
                  "src": "5712:56:13"
                }
              ]
            },
            "documentation": "@dev Grants permission if allowed. This requires `msg.sender` to be the permission manager\n@notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform",
            "id": 8099,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "grantPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8080,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8099,
                  "src": "5635:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8079,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5635:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8082,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8099,
                  "src": "5652:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8081,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5652:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8084,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8099,
                  "src": "5666:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8083,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5666:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5634:46:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8086,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5702:0:13"
            },
            "scope": 9152,
            "src": "5610:165:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8134,
              "nodeType": "Block",
              "src": "6489:156:13",
              "statements": [
                {
                  "assignments": [
                    8116
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8116,
                      "name": "paramsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 8135,
                      "src": "6499:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8115,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6499:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8126,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8120,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8117,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8108,
                          "src": "6520:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 8118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6520:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6537:1:13",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6520:18:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 8124,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7915,
                      "src": "6564:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 8125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6520:60:13",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8122,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8108,
                          "src": "6553:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 8121,
                        "name": "_saveParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8619,
                        "src": "6541:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint256[] memory) returns (bytes32)"
                        }
                      },
                      "id": 8123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6541:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6499:81:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8128,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8101,
                        "src": "6605:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8129,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8103,
                        "src": "6614:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8130,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8105,
                        "src": "6620:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8131,
                        "name": "paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8116,
                        "src": "6627:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8127,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8546,
                      "src": "6590:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 8132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6590:48:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8133,
                  "nodeType": "ExpressionStatement",
                  "src": "6590:48:13"
                }
              ]
            },
            "documentation": "@dev Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager\n@notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform\n@param _params Permission parameters",
            "id": 8135,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8111,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8103,
                    "src": "6472:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8112,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8105,
                    "src": "6478:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8113,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8110,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "6450:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6450:34:13"
              }
            ],
            "name": "grantPermissionP",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8101,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8135,
                  "src": "6362:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6362:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8103,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8135,
                  "src": "6379:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6379:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8105,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8135,
                  "src": "6393:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8104,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6393:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8108,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 8135,
                  "src": "6408:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8106,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6408:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8107,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6408:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6361:65:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8114,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6489:0:13"
            },
            "scope": 9152,
            "src": "6336:309:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8155,
              "nodeType": "Block",
              "src": "7223:68:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8149,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8137,
                        "src": "7248:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8150,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8139,
                        "src": "7257:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8151,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8141,
                        "src": "7263:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8152,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7920,
                        "src": "7270:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8148,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8546,
                      "src": "7233:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 8153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7233:51:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8154,
                  "nodeType": "ExpressionStatement",
                  "src": "7233:51:13"
                }
              ]
            },
            "documentation": "@dev Revokes permission if allowed. This requires `msg.sender` to be the the permission manager\n@notice Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity to revoke access from\n@param _app Address of the app in which the role will be revoked\n@param _role Identifier for the group of actions in app being revoked",
            "id": 8156,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8144,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8139,
                    "src": "7206:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8145,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8141,
                    "src": "7212:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8146,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8143,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "7184:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7184:34:13"
              }
            ],
            "name": "revokePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8142,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8137,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8156,
                  "src": "7113:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8136,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7113:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8139,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8156,
                  "src": "7130:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8138,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7130:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8141,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8156,
                  "src": "7144:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8140,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7144:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7112:46:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8147,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7223:0:13"
            },
            "scope": 9152,
            "src": "7087:204:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8175,
              "nodeType": "Block",
              "src": "7743:64:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8170,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8158,
                        "src": "7775:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8171,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8160,
                        "src": "7788:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8172,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8162,
                        "src": "7794:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8169,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "7753:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7753:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8174,
                  "nodeType": "ExpressionStatement",
                  "src": "7753:47:13"
                }
              ]
            },
            "documentation": "@notice Set `_newManager` as the manager of `_role` in `_app`\n@param _newManager Address for the new manager\n@param _app Address of the app in which the permission management is being transferred\n@param _role Identifier for the group of actions being transferred",
            "id": 8176,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8165,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8160,
                    "src": "7726:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8166,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8162,
                    "src": "7732:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8167,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8164,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "7704:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7704:34:13"
              }
            ],
            "name": "setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8158,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8176,
                  "src": "7629:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8157,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7629:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8160,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8176,
                  "src": "7650:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8159,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7650:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8162,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8176,
                  "src": "7664:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8161,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7664:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7628:50:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8168,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7743:0:13"
            },
            "scope": 9152,
            "src": "7599:208:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8195,
              "nodeType": "Block",
              "src": "8159:63:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8199:1:13",
                            "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": 8188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8191:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8191:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8191,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8178,
                        "src": "8203:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8192,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8180,
                        "src": "8209:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8187,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "8169:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8169:46:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8194,
                  "nodeType": "ExpressionStatement",
                  "src": "8169:46:13"
                }
              ]
            },
            "documentation": "@notice Remove the manager of `_role` in `_app`\n@param _app Address of the app in which the permission is being unmanaged\n@param _role Identifier for the group of actions being unmanaged",
            "id": 8196,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8183,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8178,
                    "src": "8142:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8184,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8180,
                    "src": "8148:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8185,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8182,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "8120:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8120:34:13"
              }
            ],
            "name": "removePermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8178,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "8066:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8177,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8066:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8180,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "8080:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8179,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8080:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8065:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8159:0:13"
            },
            "scope": 9152,
            "src": "8033:189:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8216,
              "nodeType": "Block",
              "src": "8673:64:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8211,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7931,
                        "src": "8705:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8212,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "8718:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8213,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8200,
                        "src": "8724:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8210,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "8683:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8683:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8215,
                  "nodeType": "ExpressionStatement",
                  "src": "8683:47:13"
                }
              ]
            },
            "documentation": "@notice Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n@param _app Address of the app in which the permission is being burned\n@param _role Identifier for the group of actions being burned",
            "id": 8217,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8203,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7876,
                    "src": "8603:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8204,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8202,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10409,
                  "src": "8598:4:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8598:29:13"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8206,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8198,
                    "src": "8656:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8207,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8200,
                    "src": "8662:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8208,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8205,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8023,
                  "src": "8636:19:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8636:32:13"
              }
            ],
            "name": "createBurnedPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8198,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8217,
                  "src": "8544:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8197,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8544:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8200,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8217,
                  "src": "8558:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8199,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8558:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8543:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8209,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8673:0:13"
            },
            "scope": 9152,
            "src": "8512:225:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8234,
              "nodeType": "Block",
              "src": "9138:64:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8229,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7931,
                        "src": "9170:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8230,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8219,
                        "src": "9183:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8231,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8221,
                        "src": "9189:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8228,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "9148:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9148:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8233,
                  "nodeType": "ExpressionStatement",
                  "src": "9148:47:13"
                }
              ]
            },
            "documentation": "@notice Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n@param _app Address of the app in which the permission is being burned\n@param _role Identifier for the group of actions being burned",
            "id": 8235,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8224,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8219,
                    "src": "9121:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8225,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8221,
                    "src": "9127:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8226,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8223,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "9099:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9099:34:13"
              }
            ],
            "name": "burnPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8219,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8235,
                  "src": "9045:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8218,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9045:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8221,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8235,
                  "src": "9059:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8220,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9059:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9044:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8227,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9138:0:13"
            },
            "scope": 9152,
            "src": "9014:188:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8257,
              "nodeType": "Block",
              "src": "9620:98:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8246,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7952,
                        "src": "9637:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 8254,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8247,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "9654:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 8253,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8249,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8237,
                              "src": "9681:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8250,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8239,
                              "src": "9690:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8251,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8241,
                              "src": "9696:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8248,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9151,
                            "src": "9666:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 8252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9666:36:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9654:49:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9637:67:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 8255,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9637:74:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8245,
                  "id": 8256,
                  "nodeType": "Return",
                  "src": "9630:81:13"
                }
              ]
            },
            "documentation": "@notice Get parameters for permission array length\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@return Length of the array",
            "id": 8258,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParamsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8237,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8258,
                  "src": "9545:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9545:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8239,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8258,
                  "src": "9562:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8238,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9562:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8241,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8258,
                  "src": "9576:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8240,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9576:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9544:46:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8244,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8258,
                  "src": "9614:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8243,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9614:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9613:6:13"
            },
            "scope": 9152,
            "src": "9510:208:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8297,
              "nodeType": "Block",
              "src": "10225:164:13",
              "statements": [
                {
                  "assignments": [
                    8276
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8276,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 8298,
                      "src": "10235:19:13",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8275,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7897,
                        "src": "10235:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8288,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8277,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7952,
                        "src": "10257:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 8285,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8278,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "10274:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 8284,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8280,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8260,
                              "src": "10301:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8281,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8262,
                              "src": "10310:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8282,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8264,
                              "src": "10316:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8279,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9151,
                            "src": "10286:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 8283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10286:36:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10274:49:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10257:67:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 8287,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8286,
                      "name": "_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8266,
                      "src": "10325:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10257:75:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$7897_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10235:97:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8289,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8276,
                          "src": "10350:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 8290,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7892,
                        "src": "10350:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8291,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8276,
                          "src": "10360:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 8292,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "op",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7894,
                        "src": "10360:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8293,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8276,
                          "src": "10370:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 8294,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7896,
                        "src": "10370:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "id": 8295,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "10349:33:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_uint8_$_t_uint240_$",
                      "typeString": "tuple(uint8,uint8,uint240)"
                    }
                  },
                  "functionReturnParameters": 8274,
                  "id": 8296,
                  "nodeType": "Return",
                  "src": "10342:40:13"
                }
              ]
            },
            "documentation": "@notice Get parameter for permission\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@param _index Index of parameter in the array\n@return Parameter (id, op, value)",
            "id": 8298,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8260,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10092:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8259,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10092:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8262,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10109:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10109:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8264,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10123:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8263,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10123:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8266,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10138:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8265,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10138:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10091:59:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8269,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10198:5:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8268,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10198:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8271,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10205:5:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8270,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10205:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8273,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10212:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  },
                  "typeName": {
                    "id": 8272,
                    "name": "uint240",
                    "nodeType": "ElementaryTypeName",
                    "src": "10212:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint240",
                      "typeString": "uint240"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10197:23:13"
            },
            "scope": 9152,
            "src": "10064:325:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8314,
              "nodeType": "Block",
              "src": "10690:64:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8307,
                      "name": "permissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7956,
                      "src": "10707:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 8312,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8309,
                          "name": "_app",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8300,
                          "src": "10734:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8310,
                          "name": "_role",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8302,
                          "src": "10740:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 8308,
                        "name": "roleHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9129,
                        "src": "10725:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 8311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10725:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10707:40:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8306,
                  "id": 8313,
                  "nodeType": "Return",
                  "src": "10700:47:13"
                }
              ]
            },
            "documentation": "@dev Get manager for permission\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@return address of the manager for the permission",
            "id": 8315,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8300,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8315,
                  "src": "10631:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8299,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10631:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8302,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8315,
                  "src": "10645:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8301,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10645:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10630:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8306,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8305,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8315,
                  "src": "10681:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8304,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10681:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10680:9:13"
            },
            "scope": 9152,
            "src": "10601:153:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8338,
              "nodeType": "Block",
              "src": "11234:115:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8329,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8317,
                        "src": "11265:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8330,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8319,
                        "src": "11271:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8331,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8321,
                        "src": "11279:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8334,
                            "name": "_how",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8323,
                            "src": "11336:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8332,
                            "name": "ConversionHelpers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10552,
                            "src": "11286:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ConversionHelpers_$10552_$",
                              "typeString": "type(library ConversionHelpers)"
                            }
                          },
                          "id": 8333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "dangerouslyCastBytesToUintArray",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10551,
                          "src": "11286:49:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (uint256[] memory)"
                          }
                        },
                        "id": 8335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11286:55:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8328,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8339,
                        8406,
                        8435
                      ],
                      "referencedDeclaration": 8406,
                      "src": "11251:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11251:91:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8327,
                  "id": 8337,
                  "nodeType": "Return",
                  "src": "11244:98:13"
                }
              ]
            },
            "documentation": "@dev Function called by apps to check ACL on kernel or to check permission statu\n@param _who Sender of the original call\n@param _where Address of the app\n@param _where Identifier for a group of actions in app\n@param _how Permission parameters\n@return boolean indicating whether the ACL allows the role or not",
            "id": 8339,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8317,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11143:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8316,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11143:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8319,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11157:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11157:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8321,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11173:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8320,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11173:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8323,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11188:17:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8322,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11188:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11142:64:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8326,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11228:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8325,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11228:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11227:6:13"
            },
            "scope": 9152,
            "src": "11120:229:13",
            "stateMutability": "view",
            "superFunction": 9672,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8405,
              "nodeType": "Block",
              "src": "11473:457:13",
              "statements": [
                {
                  "assignments": [
                    8354
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8354,
                      "name": "whoParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 8406,
                      "src": "11483:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8353,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11483:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8362,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8355,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7947,
                      "src": "11503:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 8361,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8357,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8341,
                          "src": "11530:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8358,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8343,
                          "src": "11536:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8359,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8345,
                          "src": "11544:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 8356,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9151,
                        "src": "11515:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 8360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11515:35:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11503:48:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11483:68:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 8365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8363,
                        "name": "whoParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8354,
                        "src": "11565:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8364,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7920,
                        "src": "11578:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11565:26:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8367,
                          "name": "whoParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8354,
                          "src": "11606:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8368,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8341,
                          "src": "11617:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8369,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8343,
                          "src": "11623:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8370,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8345,
                          "src": "11631:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8371,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8348,
                          "src": "11638:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 8366,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8468,
                        "src": "11595:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                        }
                      },
                      "id": 8372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11595:48:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11565:78:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8377,
                  "nodeType": "IfStatement",
                  "src": "11561:120:13",
                  "trueBody": {
                    "id": 8376,
                    "nodeType": "Block",
                    "src": "11645:36:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11666:4:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8352,
                        "id": 8375,
                        "nodeType": "Return",
                        "src": "11659:11:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8379,
                      "name": "anyParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 8406,
                      "src": "11691:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8378,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11691:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8387,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8380,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7947,
                      "src": "11711:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 8386,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8382,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7926,
                          "src": "11738:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8383,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8343,
                          "src": "11750:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8384,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8345,
                          "src": "11758:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 8381,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9151,
                        "src": "11723:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 8385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11723:41:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11711:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11691:74:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8398,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 8390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8388,
                        "name": "anyParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8379,
                        "src": "11779:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8389,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7920,
                        "src": "11792:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11779:26:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8392,
                          "name": "anyParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8379,
                          "src": "11820:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8393,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7926,
                          "src": "11831:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8394,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8343,
                          "src": "11843:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8395,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8345,
                          "src": "11851:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8396,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8348,
                          "src": "11858:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 8391,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8468,
                        "src": "11809:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                        }
                      },
                      "id": 8397,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11809:54:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11779:84:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8402,
                  "nodeType": "IfStatement",
                  "src": "11775:126:13",
                  "trueBody": {
                    "id": 8401,
                    "nodeType": "Block",
                    "src": "11865:36:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11886:4:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8352,
                        "id": 8400,
                        "nodeType": "Return",
                        "src": "11879:11:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 8403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11918:5:13",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 8352,
                  "id": 8404,
                  "nodeType": "Return",
                  "src": "11911:12:13"
                }
              ]
            },
            "documentation": null,
            "id": 8406,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8341,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11378:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8340,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11378:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8343,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11392:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8342,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11392:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8345,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11408:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8344,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11408:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8348,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11423:21:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8346,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11423:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8347,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11423:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11377:68:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8352,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8351,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11467:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8350,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11467:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11466:6:13"
            },
            "scope": 9152,
            "src": "11355:575:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8434,
              "nodeType": "Block",
              "src": "12031:116:13",
              "statements": [
                {
                  "assignments": [
                    8420
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8420,
                      "name": "empty",
                      "nodeType": "VariableDeclaration",
                      "scope": 8435,
                      "src": "12041:22:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12041:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8419,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12041:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8426,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12080:1:13",
                        "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": 8423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "12066:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12070:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8422,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12070:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 8425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12066:16:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12041:41:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8428,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8408,
                        "src": "12113:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8429,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8410,
                        "src": "12119:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8430,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8412,
                        "src": "12127:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8431,
                        "name": "empty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8420,
                        "src": "12134:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8427,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8339,
                        8406,
                        8435
                      ],
                      "referencedDeclaration": 8406,
                      "src": "12099:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8432,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12099:41:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8416,
                  "id": 8433,
                  "nodeType": "Return",
                  "src": "12092:48:13"
                }
              ]
            },
            "documentation": null,
            "id": 8435,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8408,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8435,
                  "src": "11959:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8407,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11959:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8410,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8435,
                  "src": "11973:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11973:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8412,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8435,
                  "src": "11989:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8411,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11989:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11958:45:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8415,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8435,
                  "src": "12025:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8414,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12025:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12024:6:13"
            },
            "scope": 9152,
            "src": "11936:211:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8467,
              "nodeType": "Block",
              "src": "12332:160:13",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 8453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8451,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8437,
                      "src": "12346:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8452,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7915,
                      "src": "12361:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12346:31:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8457,
                  "nodeType": "IfStatement",
                  "src": "12342:73:13",
                  "trueBody": {
                    "id": 8456,
                    "nodeType": "Block",
                    "src": "12379:36:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12400:4:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8450,
                        "id": 8455,
                        "nodeType": "Return",
                        "src": "12393:11:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8459,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8437,
                        "src": "12443:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8460,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12456:1:13",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 8461,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8439,
                        "src": "12459:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8462,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8441,
                        "src": "12465:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8463,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8443,
                        "src": "12473:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8464,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8446,
                        "src": "12480:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8458,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8787,
                      "src": "12432:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12432:53:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8450,
                  "id": 8466,
                  "nodeType": "Return",
                  "src": "12425:60:13"
                }
              ]
            },
            "documentation": null,
            "id": 8468,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "evalParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8447,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8437,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12182:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8436,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12182:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8439,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12211:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12211:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8441,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12233:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12233:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8443,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12257:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8442,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12257:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8446,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12280:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8444,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12280:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8445,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12280:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12172:128:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8449,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12322:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8448,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12322:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12321:6:13"
            },
            "scope": 9152,
            "src": "12153:339:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8492,
              "nodeType": "Block",
              "src": "12698:125:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8480,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8470,
                        "src": "12723:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8481,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8472,
                        "src": "12732:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8482,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8474,
                        "src": "12738:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8483,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7915,
                        "src": "12745:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8479,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8546,
                      "src": "12708:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 8484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12708:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8485,
                  "nodeType": "ExpressionStatement",
                  "src": "12708:54:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8487,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8476,
                        "src": "12794:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8488,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8472,
                        "src": "12804:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8489,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8474,
                        "src": "12810:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8486,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "12772:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12772:44:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8491,
                  "nodeType": "ExpressionStatement",
                  "src": "12772:44:13"
                }
              ]
            },
            "documentation": "@dev Internal createPermission for access inside the kernel (on instantiation)",
            "id": 8493,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8470,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8493,
                  "src": "12625:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8469,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12625:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8472,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8493,
                  "src": "12642:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8471,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12642:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8474,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8493,
                  "src": "12656:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8473,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12656:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8476,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8493,
                  "src": "12671:16:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12671:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12624:64:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8478,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12698:0:13"
            },
            "scope": 9152,
            "src": "12598:225:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8545,
              "nodeType": "Block",
              "src": "13012:426:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8504,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7947,
                        "src": "13022:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                          "typeString": "mapping(bytes32 => bytes32)"
                        }
                      },
                      "id": 8510,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8506,
                            "name": "_entity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8495,
                            "src": "13049:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8507,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8497,
                            "src": "13058:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8508,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8499,
                            "src": "13064:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 8505,
                          "name": "permissionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9151,
                          "src": "13034:14:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 8509,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13034:36:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13022:49:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8511,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8501,
                      "src": "13074:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13022:63:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 8513,
                  "nodeType": "ExpressionStatement",
                  "src": "13022:63:13"
                },
                {
                  "assignments": [
                    8515
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8515,
                      "name": "entityHasPermission",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "13095:24:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8514,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13095:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8519,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 8518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8516,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8501,
                      "src": "13122:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8517,
                      "name": "NO_PERMISSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7920,
                      "src": "13137:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13122:28:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13095:55:13"
                },
                {
                  "assignments": [
                    8521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8521,
                      "name": "permissionHasParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "13160:24:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8520,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13160:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8527,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8522,
                      "name": "entityHasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8515,
                      "src": "13187:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 8525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8523,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8501,
                        "src": "13210:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8524,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7915,
                        "src": "13225:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "13210:31:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13187:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13160:81:13"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8529,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8495,
                        "src": "13271:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8530,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8497,
                        "src": "13280:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8531,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8499,
                        "src": "13286:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8532,
                        "name": "entityHasPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8515,
                        "src": "13293:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 8528,
                      "name": "SetPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7966,
                      "src": "13257:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bytes32,bool)"
                      }
                    },
                    "id": 8533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13257:56:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8534,
                  "nodeType": "EmitStatement",
                  "src": "13252:61:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 8535,
                    "name": "permissionHasParams",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8521,
                    "src": "13327:19:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8544,
                  "nodeType": "IfStatement",
                  "src": "13323:109:13",
                  "trueBody": {
                    "id": 8543,
                    "nodeType": "Block",
                    "src": "13348:84:13",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8537,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8495,
                              "src": "13387:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8538,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8497,
                              "src": "13396:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8539,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8499,
                              "src": "13402:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8540,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8501,
                              "src": "13409:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8536,
                            "name": "SetPermissionParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7976,
                            "src": "13367:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,bytes32,bytes32)"
                            }
                          },
                          "id": 8541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13367:54:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8542,
                        "nodeType": "EmitStatement",
                        "src": "13362:59:13"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Internal function called to actually save the permission",
            "id": 8546,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8495,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8546,
                  "src": "12936:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8494,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12936:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8497,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8546,
                  "src": "12953:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8496,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12953:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8499,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8546,
                  "src": "12967:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8498,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12967:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8501,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 8546,
                  "src": "12982:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8500,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12982:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12935:67:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8503,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13012:0:13"
            },
            "scope": 9152,
            "src": "12912:526:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8618,
              "nodeType": "Block",
              "src": "13518:540:13",
              "statements": [
                {
                  "assignments": [
                    8555
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8555,
                      "name": "paramHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 8619,
                      "src": "13528:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8554,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13528:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8562,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8559,
                            "name": "_encodedParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8549,
                            "src": "13575:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8557,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "13558:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 8558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13558:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 8560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13558:32:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 8556,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "13548:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 8561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13548:43:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13528:63:13"
                },
                {
                  "assignments": [
                    8566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8566,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 8619,
                      "src": "13601:22:13",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                        "typeString": "struct ACL.Param[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 8564,
                          "name": "Param",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 7897,
                          "src": "13601:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                            "typeString": "struct ACL.Param"
                          }
                        },
                        "id": 8565,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "13601:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8570,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8567,
                      "name": "permissionParams",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7952,
                      "src": "13626:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                      }
                    },
                    "id": 8569,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8568,
                      "name": "paramHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8555,
                      "src": "13643:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13626:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                      "typeString": "struct ACL.Param storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13601:52:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8571,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8566,
                        "src": "13668:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param storage ref[] storage pointer"
                        }
                      },
                      "id": 8572,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13668:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13685:1:13",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13668:18:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8615,
                  "nodeType": "IfStatement",
                  "src": "13664:361:13",
                  "trueBody": {
                    "id": 8614,
                    "nodeType": "Block",
                    "src": "13688:337:13",
                    "statements": [
                      {
                        "body": {
                          "id": 8612,
                          "nodeType": "Block",
                          "src": "13781:234:13",
                          "statements": [
                            {
                              "assignments": [
                                8587
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8587,
                                  "name": "encodedParam",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8619,
                                  "src": "13799:20:13",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8586,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13799:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8591,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8588,
                                  "name": "_encodedParams",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8549,
                                  "src": "13822:14:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 8590,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8589,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8576,
                                  "src": "13837:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13822:17:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13799:40:13"
                            },
                            {
                              "assignments": [
                                8593
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8593,
                                  "name": "param",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8619,
                                  "src": "13857:18:13",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                    "typeString": "struct ACL.Param"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 8592,
                                    "name": "Param",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 7897,
                                    "src": "13857:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                                      "typeString": "struct ACL.Param"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8605,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8596,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8587,
                                        "src": "13898:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 8595,
                                      "name": "decodeParamId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9611,
                                      "src": "13884:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 8597,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13884:27:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8599,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8587,
                                        "src": "13927:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 8598,
                                      "name": "decodeParamOp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9594,
                                      "src": "13913:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 8600,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13913:27:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8602,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8587,
                                        "src": "13950:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 8601,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "13942:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint240_$",
                                        "typeString": "type(uint240)"
                                      },
                                      "typeName": "uint240"
                                    },
                                    "id": 8603,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13942:21:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 8594,
                                  "name": "Param",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7897,
                                  "src": "13878:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Param_$7897_storage_ptr_$",
                                    "typeString": "type(struct ACL.Param storage pointer)"
                                  }
                                },
                                "id": 8604,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13878:86:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$7897_memory",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13857:107:13"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8609,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8593,
                                    "src": "13994:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8606,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8566,
                                    "src": "13982:6:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                                      "typeString": "struct ACL.Param storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 8608,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13982:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Param_$7897_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct ACL.Param storage ref) returns (uint256)"
                                  }
                                },
                                "id": 8610,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13982:18:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8611,
                              "nodeType": "ExpressionStatement",
                              "src": "13982:18:13"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8579,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8576,
                            "src": "13749:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8580,
                              "name": "_encodedParams",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8549,
                              "src": "13753:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 8581,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "13753:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13749:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8613,
                        "initializationExpression": {
                          "assignments": [
                            8576
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 8576,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 8619,
                              "src": "13734:9:13",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 8575,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "13734:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 8578,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13746:1:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "13734:13:13"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8584,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "13776:3:13",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 8583,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8576,
                              "src": "13776:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8585,
                          "nodeType": "ExpressionStatement",
                          "src": "13776:3:13"
                        },
                        "nodeType": "ForStatement",
                        "src": "13729:286:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8616,
                    "name": "paramHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8555,
                    "src": "14042:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 8553,
                  "id": 8617,
                  "nodeType": "Return",
                  "src": "14035:16:13"
                }
              ]
            },
            "documentation": null,
            "id": 8619,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_saveParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8549,
                  "name": "_encodedParams",
                  "nodeType": "VariableDeclaration",
                  "scope": 8619,
                  "src": "13465:24:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8547,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13465:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8548,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13465:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13464:26:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8552,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8619,
                  "src": "13509:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8551,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13509:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13508:9:13"
            },
            "scope": 9152,
            "src": "13444:614:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8786,
              "nodeType": "Block",
              "src": "14270:1208:13",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8637,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8623,
                      "src": "14284:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8638,
                          "name": "permissionParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7952,
                          "src": "14296:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                          }
                        },
                        "id": 8640,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 8639,
                          "name": "_paramsHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8621,
                          "src": "14313:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14296:29:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                          "typeString": "struct ACL.Param storage ref[] storage ref"
                        }
                      },
                      "id": 8641,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14296:36:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14284:48:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8646,
                  "nodeType": "IfStatement",
                  "src": "14280:108:13",
                  "trueBody": {
                    "id": 8645,
                    "nodeType": "Block",
                    "src": "14334:54:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 8643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14355:5:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 8636,
                        "id": 8644,
                        "nodeType": "Return",
                        "src": "14348:12:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8648
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8648,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 8787,
                      "src": "14398:18:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8647,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7897,
                        "src": "14398:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8654,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8649,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7952,
                        "src": "14419:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 8651,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8650,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8621,
                        "src": "14436:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14419:29:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 8653,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8652,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8623,
                      "src": "14449:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14419:39:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$7897_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14398:60:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 8658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8655,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8648,
                        "src": "14473:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 8656,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7892,
                      "src": "14473:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8657,
                      "name": "LOGIC_OP_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7909,
                      "src": "14485:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14473:29:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8669,
                  "nodeType": "IfStatement",
                  "src": "14469:124:13",
                  "trueBody": {
                    "id": 8668,
                    "nodeType": "Block",
                    "src": "14504:89:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8660,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8648,
                              "src": "14536:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8661,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8621,
                              "src": "14543:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8662,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8625,
                              "src": "14556:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8663,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8627,
                              "src": "14562:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8664,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8629,
                              "src": "14570:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8665,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8632,
                              "src": "14577:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 8659,
                            "name": "_evalLogic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8952,
                            "src": "14525:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Param_$7897_memory_ptr_$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct ACL.Param memory,bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 8666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14525:57:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8636,
                        "id": 8667,
                        "nodeType": "Return",
                        "src": "14518:64:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8671,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 8787,
                      "src": "14603:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8670,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14603:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8672,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14603:13:13"
                },
                {
                  "assignments": [
                    8674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8674,
                      "name": "comparedTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 8787,
                      "src": "14626:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8673,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14626:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8679,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8676,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8648,
                          "src": "14655:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 8677,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7896,
                        "src": "14655:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      ],
                      "id": 8675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14647:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 8678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14647:20:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14626:41:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 8683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8680,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8648,
                        "src": "14703:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 8681,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7892,
                      "src": "14703:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8682,
                      "name": "ORACLE_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7906,
                      "src": "14715:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14703:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 8708,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8705,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8648,
                          "src": "14874:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 8706,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7892,
                        "src": "14874:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8707,
                        "name": "BLOCK_NUMBER_PARAM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7900,
                        "src": "14886:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "14874:33:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 8718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8715,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8648,
                            "src": "14968:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8716,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7892,
                          "src": "14968:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8717,
                          "name": "TIMESTAMP_PARAM_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7903,
                          "src": "14980:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "14968:30:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 8728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8725,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8648,
                              "src": "15057:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 8726,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7892,
                            "src": "15057:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 8727,
                            "name": "PARAM_VALUE_PARAM_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7912,
                            "src": "15069:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15057:32:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8757,
                          "nodeType": "Block",
                          "src": "15150:176:13",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8741,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8737,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8648,
                                    "src": "15168:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  },
                                  "id": 8738,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7892,
                                  "src": "15168:8:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8739,
                                    "name": "_how",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8632,
                                    "src": "15180:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 8740,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "15180:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15168:23:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 8745,
                              "nodeType": "IfStatement",
                              "src": "15164:74:13",
                              "trueBody": {
                                "id": 8744,
                                "nodeType": "Block",
                                "src": "15193:45:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "hexValue": "66616c7365",
                                      "id": 8742,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "15218:5:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    "functionReturnParameters": 8636,
                                    "id": 8743,
                                    "nodeType": "Return",
                                    "src": "15211:12:13"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8746,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8671,
                                  "src": "15251:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 8749,
                                            "name": "_how",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8632,
                                            "src": "15275:4:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 8752,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8750,
                                              "name": "param",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8648,
                                              "src": "15280:5:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                                "typeString": "struct ACL.Param memory"
                                              }
                                            },
                                            "id": 8751,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "id",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 7892,
                                            "src": "15280:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "15275:14:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 8748,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15267:7:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint240_$",
                                          "typeString": "type(uint240)"
                                        },
                                        "typeName": "uint240"
                                      },
                                      "id": 8753,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15267:23:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 8747,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15259:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 8754,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15259:32:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15251:40:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8756,
                              "nodeType": "ExpressionStatement",
                              "src": "15251:40:13"
                            }
                          ]
                        },
                        "id": 8758,
                        "nodeType": "IfStatement",
                        "src": "15053:273:13",
                        "trueBody": {
                          "id": 8736,
                          "nodeType": "Block",
                          "src": "15091:53:13",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8734,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8729,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8671,
                                  "src": "15105:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8731,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8648,
                                        "src": "15121:5:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 8732,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7896,
                                      "src": "15121:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 8730,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15113:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 8733,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15113:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15105:28:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8735,
                              "nodeType": "ExpressionStatement",
                              "src": "15105:28:13"
                            }
                          ]
                        }
                      },
                      "id": 8759,
                      "nodeType": "IfStatement",
                      "src": "14964:362:13",
                      "trueBody": {
                        "id": 8724,
                        "nodeType": "Block",
                        "src": "15000:47:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8722,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8719,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8671,
                                "src": "15014:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 8720,
                                  "name": "getTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11188,
                                  "src": "15022:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 8721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15022:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15014:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8723,
                            "nodeType": "ExpressionStatement",
                            "src": "15014:22:13"
                          }
                        ]
                      }
                    },
                    "id": 8760,
                    "nodeType": "IfStatement",
                    "src": "14870:456:13",
                    "trueBody": {
                      "id": 8714,
                      "nodeType": "Block",
                      "src": "14909:49:13",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8709,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8671,
                              "src": "14923:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 8710,
                                "name": "getBlockNumber",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11168,
                                "src": "14931:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 8711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14931:16:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "14923:24:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8713,
                          "nodeType": "ExpressionStatement",
                          "src": "14923:24:13"
                        }
                      ]
                    }
                  },
                  "id": 8761,
                  "nodeType": "IfStatement",
                  "src": "14699:627:13",
                  "trueBody": {
                    "id": 8704,
                    "nodeType": "Block",
                    "src": "14732:132:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8684,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8671,
                            "src": "14746:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8687,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8648,
                                        "src": "14777:5:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 8688,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7896,
                                      "src": "14777:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 8686,
                                    "name": "IACLOracle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9690,
                                    "src": "14766:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IACLOracle_$9690_$",
                                      "typeString": "type(contract IACLOracle)"
                                    }
                                  },
                                  "id": 8689,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14766:23:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IACLOracle_$9690",
                                    "typeString": "contract IACLOracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8690,
                                  "name": "_who",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8625,
                                  "src": "14791:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8691,
                                  "name": "_where",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8627,
                                  "src": "14797:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8692,
                                  "name": "_what",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8629,
                                  "src": "14805:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8693,
                                  "name": "_how",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8632,
                                  "src": "14812:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IACLOracle_$9690",
                                    "typeString": "contract IACLOracle"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 8685,
                                "name": "checkOracle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9085,
                                "src": "14754:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_contract$_IACLOracle_$9690_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (contract IACLOracle,address,address,bytes32,uint256[] memory) view returns (bool)"
                                }
                              },
                              "id": 8694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14754:63:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8696,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14824:1:13",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 8697,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "14754:71:13",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 8695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14820:1:13",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "14746:79:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8699,
                        "nodeType": "ExpressionStatement",
                        "src": "14746:79:13"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8700,
                            "name": "comparedTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8674,
                            "src": "14839:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 8701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14852:1:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "14839:14:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8703,
                        "nodeType": "ExpressionStatement",
                        "src": "14839:14:13"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8763,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8648,
                            "src": "15343:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8764,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7894,
                          "src": "15343:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 8762,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "15340:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8765,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15340:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8766,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "15356:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "RET",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15356:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15340:22:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8776,
                  "nodeType": "IfStatement",
                  "src": "15336:78:13",
                  "trueBody": {
                    "id": 8775,
                    "nodeType": "Block",
                    "src": "15364:50:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8770,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8671,
                                "src": "15393:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8769,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15385:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 8771,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15385:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15402:1:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15385:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8636,
                        "id": 8774,
                        "nodeType": "Return",
                        "src": "15378:25:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8778,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8671,
                        "src": "15439:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8780,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8648,
                              "src": "15449:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 8781,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7894,
                            "src": "15449:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 8779,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "15446:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15446:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8783,
                        "name": "comparedTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8674,
                        "src": "15460:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8777,
                      "name": "compare",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9020,
                      "src": "15431:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_Op_$7890_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256,enum ACL.Op,uint256) pure returns (bool)"
                      }
                    },
                    "id": 8784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15431:40:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8636,
                  "id": 8785,
                  "nodeType": "Return",
                  "src": "15424:47:13"
                }
              ]
            },
            "documentation": null,
            "id": 8787,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8621,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14093:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8620,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14093:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8623,
                  "name": "_paramId",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14122:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 8622,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14122:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8625,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14147:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8624,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14147:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8627,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14169:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8626,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14169:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8629,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14193:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8628,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14193:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8632,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14216:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8630,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14216:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8631,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "14216:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14083:153:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8636,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8635,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14260:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8634,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14260:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14259:6:13"
            },
            "scope": 9152,
            "src": "14064:1414:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8951,
              "nodeType": "Block",
              "src": "15657:1131:13",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8806,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8789,
                            "src": "15674:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8807,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7894,
                          "src": "15674:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 8805,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "15671:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8808,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15671:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8809,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "15688:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8810,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "IF_ELSE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15688:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15671:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8857,
                  "nodeType": "IfStatement",
                  "src": "15667:450:13",
                  "trueBody": {
                    "id": 8856,
                    "nodeType": "Block",
                    "src": "15700:417:13",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8813,
                            "name": "conditionParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 8952,
                            "src": "15714:21:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 8812,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15714:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8814,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15714:21:13"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8816,
                            "name": "successParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 8952,
                            "src": "15749:19:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 8815,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15749:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8817,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15749:19:13"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8819,
                            "name": "failureParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 8952,
                            "src": "15782:19:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 8818,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15782:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8820,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15782:19:13"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 8821,
                                "name": "conditionParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8813,
                                "src": "15817:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8822,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8816,
                                "src": "15833:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8823,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8819,
                                "src": "15847:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "id": 8824,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "15816:44:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8827,
                                      "name": "_param",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8789,
                                      "src": "15888:6:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                        "typeString": "struct ACL.Param memory"
                                      }
                                    },
                                    "id": 8828,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7896,
                                    "src": "15888:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 8826,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15880:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 8829,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15880:21:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8825,
                              "name": "decodeParamsList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9651,
                              "src": "15863:16:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                                "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                              }
                            },
                            "id": 8830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15863:39:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "src": "15816:86:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8832,
                        "nodeType": "ExpressionStatement",
                        "src": "15816:86:13"
                      },
                      {
                        "assignments": [
                          8834
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8834,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 8952,
                            "src": "15916:11:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 8833,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "15916:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8843,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8836,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8791,
                              "src": "15941:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8837,
                              "name": "conditionParam",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8813,
                              "src": "15954:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8838,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8793,
                              "src": "15970:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8839,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8795,
                              "src": "15976:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8840,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8797,
                              "src": "15984:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8841,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8800,
                              "src": "15991:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 8835,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8787,
                            "src": "15930:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 8842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15930:66:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15916:80:13"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8845,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8791,
                              "src": "16029:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "id": 8846,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8834,
                                "src": "16042:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 8848,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8819,
                                "src": "16066:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 8849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "16042:36:13",
                              "trueExpression": {
                                "argumentTypes": null,
                                "id": 8847,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8816,
                                "src": "16051:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8850,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8793,
                              "src": "16080:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8851,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8795,
                              "src": "16086:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8852,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8797,
                              "src": "16094:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8853,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8800,
                              "src": "16101:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 8844,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8787,
                            "src": "16018:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 8854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16018:88:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8804,
                        "id": 8855,
                        "nodeType": "Return",
                        "src": "16011:95:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8859,
                      "name": "param1",
                      "nodeType": "VariableDeclaration",
                      "scope": 8952,
                      "src": "16127:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 8858,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16127:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8860,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16127:13:13"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8862,
                      "name": "param2",
                      "nodeType": "VariableDeclaration",
                      "scope": 8952,
                      "src": "16150:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 8861,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16150:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8863,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16150:13:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 8864,
                          "name": "param1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8859,
                          "src": "16175:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8865,
                          "name": "param2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8862,
                          "src": "16183:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        null
                      ],
                      "id": 8866,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "16174:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$__$",
                        "typeString": "tuple(uint32,uint32,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8869,
                                "name": "_param",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8789,
                                "src": "16219:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "id": 8870,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7896,
                              "src": "16219:12:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            ],
                            "id": 8868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16211:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 8871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16211:21:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8867,
                        "name": "decodeParamsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9651,
                        "src": "16194:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                          "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                        }
                      },
                      "id": 8872,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16194:39:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32,uint32)"
                      }
                    },
                    "src": "16174:59:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8874,
                  "nodeType": "ExpressionStatement",
                  "src": "16174:59:13"
                },
                {
                  "assignments": [
                    8876
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8876,
                      "name": "r1",
                      "nodeType": "VariableDeclaration",
                      "scope": 8952,
                      "src": "16243:7:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8875,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16243:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8885,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8878,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8791,
                        "src": "16264:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8879,
                        "name": "param1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8859,
                        "src": "16277:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8880,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8793,
                        "src": "16285:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8881,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8795,
                        "src": "16291:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8882,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8797,
                        "src": "16299:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8883,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8800,
                        "src": "16306:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8877,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8787,
                      "src": "16253:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16253:58:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16243:68:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8887,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8789,
                            "src": "16329:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8888,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7894,
                          "src": "16329:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 8886,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16326:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16326:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8890,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16343:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NOT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16343:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16326:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8897,
                  "nodeType": "IfStatement",
                  "src": "16322:64:13",
                  "trueBody": {
                    "id": 8896,
                    "nodeType": "Block",
                    "src": "16351:35:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "16372:3:13",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 8893,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8876,
                            "src": "16373:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8804,
                        "id": 8895,
                        "nodeType": "Return",
                        "src": "16365:10:13"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8898,
                      "name": "r1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8876,
                      "src": "16400:2:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 8905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8900,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8789,
                              "src": "16409:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 8901,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7894,
                            "src": "16409:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 8899,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "16406:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16406:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8903,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "16423:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "OR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16423:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16406:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16400:28:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8910,
                  "nodeType": "IfStatement",
                  "src": "16396:70:13",
                  "trueBody": {
                    "id": 8909,
                    "nodeType": "Block",
                    "src": "16430:36:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16451:4:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8804,
                        "id": 8908,
                        "nodeType": "Return",
                        "src": "16444:11:13"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8912,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "16480:3:13",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8911,
                        "name": "r1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8876,
                        "src": "16481:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 8919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8914,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8789,
                              "src": "16490:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 8915,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7894,
                            "src": "16490:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 8913,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "16487:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16487:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8917,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "16504:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "AND",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16504:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16487:23:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16480:30:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8924,
                  "nodeType": "IfStatement",
                  "src": "16476:73:13",
                  "trueBody": {
                    "id": 8923,
                    "nodeType": "Block",
                    "src": "16512:37:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 8921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16533:5:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 8804,
                        "id": 8922,
                        "nodeType": "Return",
                        "src": "16526:12:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8926
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8926,
                      "name": "r2",
                      "nodeType": "VariableDeclaration",
                      "scope": 8952,
                      "src": "16559:7:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8925,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16559:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8935,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8928,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8791,
                        "src": "16580:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8929,
                        "name": "param2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8862,
                        "src": "16593:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8930,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8793,
                        "src": "16601:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8931,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8795,
                        "src": "16607:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8932,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8797,
                        "src": "16615:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8933,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8800,
                        "src": "16622:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8927,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8787,
                      "src": "16569:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16569:58:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16559:68:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8937,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8789,
                            "src": "16645:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8938,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7894,
                          "src": "16645:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 8936,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16642:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8939,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16642:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8940,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16659:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XOR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16659:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16642:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8948,
                  "nodeType": "IfStatement",
                  "src": "16638:69:13",
                  "trueBody": {
                    "id": 8947,
                    "nodeType": "Block",
                    "src": "16667:40:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 8945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8943,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8876,
                            "src": "16688:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 8944,
                            "name": "r2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8926,
                            "src": "16694:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "16688:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8804,
                        "id": 8946,
                        "nodeType": "Return",
                        "src": "16681:15:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8949,
                    "name": "r2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8926,
                    "src": "16724:2:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8804,
                  "id": 8950,
                  "nodeType": "Return",
                  "src": "16717:9:13"
                }
              ]
            },
            "documentation": null,
            "id": 8952,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalLogic",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8789,
                  "name": "_param",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15504:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                    "typeString": "struct ACL.Param"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8788,
                    "name": "Param",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7897,
                    "src": "15504:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                      "typeString": "struct ACL.Param"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8791,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15518:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8790,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15518:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8793,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15539:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15539:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8795,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15553:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8794,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15553:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8797,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15569:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8796,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15569:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8800,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15584:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8798,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15584:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8799,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15584:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15503:96:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8803,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15647:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8802,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15647:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15646:6:13"
            },
            "scope": 9152,
            "src": "15484:1304:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9019,
              "nodeType": "Block",
              "src": "16872:647:13",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8963,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "16886:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8964,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16893:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8965,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "EQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16893:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16886:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8971,
                  "nodeType": "IfStatement",
                  "src": "16882:34:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8967,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "16908:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8968,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "16914:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "16908:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 8970,
                    "nodeType": "Return",
                    "src": "16901:15:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8972,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "16989:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8973,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16996:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NEQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16996:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16989:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8980,
                  "nodeType": "IfStatement",
                  "src": "16985:34:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8976,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17011:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8977,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17017:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17011:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 8979,
                    "nodeType": "Return",
                    "src": "17004:15:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8981,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "17092:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8982,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "17099:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17099:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17092:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8989,
                  "nodeType": "IfStatement",
                  "src": "17088:33:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8985,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17114:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8986,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17119:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17114:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 8988,
                    "nodeType": "Return",
                    "src": "17107:14:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8990,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "17195:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8991,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "17202:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17202:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17195:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8998,
                  "nodeType": "IfStatement",
                  "src": "17191:33:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8994,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17217:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8995,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17222:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17217:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 8997,
                    "nodeType": "Return",
                    "src": "17210:14:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 9002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8999,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "17298:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9000,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "17305:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 9001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17305:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17298:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9007,
                  "nodeType": "IfStatement",
                  "src": "17294:34:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 9003,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17320:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 9004,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17326:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17320:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 9006,
                    "nodeType": "Return",
                    "src": "17313:15:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 9011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9008,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "17401:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9009,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "17408:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 9010,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17408:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17401:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9016,
                  "nodeType": "IfStatement",
                  "src": "17397:34:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9014,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 9012,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17423:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 9013,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17429:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17423:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 9015,
                    "nodeType": "Return",
                    "src": "17416:15:13"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 9017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17507:5:13",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 8962,
                  "id": 9018,
                  "nodeType": "Return",
                  "src": "17500:12:13"
                }
              ]
            },
            "documentation": null,
            "id": 9020,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8954,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 9020,
                  "src": "16811:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16811:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8956,
                  "name": "_op",
                  "nodeType": "VariableDeclaration",
                  "scope": 9020,
                  "src": "16823:6:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Op_$7890",
                    "typeString": "enum ACL.Op"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8955,
                    "name": "Op",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7890,
                    "src": "16823:2:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8958,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 9020,
                  "src": "16831:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8957,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16831:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16810:32:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8961,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9020,
                  "src": "16866:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8960,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16866:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16865:6:13"
            },
            "scope": 9152,
            "src": "16794:725:13",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9084,
              "nodeType": "Block",
              "src": "17660:1057:13",
              "statements": [
                {
                  "assignments": [
                    9037
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9037,
                      "name": "sig",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "17670:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 9036,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "17670:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9041,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9038,
                        "name": "_oracleAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9022,
                        "src": "17683:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACLOracle_$9690",
                          "typeString": "contract IACLOracle"
                        }
                      },
                      "id": 9039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "canPerform",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9689,
                      "src": "17683:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view external returns (bool)"
                      }
                    },
                    "id": 9040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "17683:31:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17670:44:13"
                },
                {
                  "assignments": [
                    9043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9043,
                      "name": "checkCalldata",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "17825:26:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 9042,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "17825:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9052,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9046,
                        "name": "sig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9037,
                        "src": "17877:3:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9047,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9024,
                        "src": "17882:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9048,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9026,
                        "src": "17888:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9049,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9028,
                        "src": "17896:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9050,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9031,
                        "src": "17903:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9044,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15140,
                        "src": "17854:3:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 9045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17854:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes4) pure returns (bytes memory)"
                      }
                    },
                    "id": 9051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17854:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17825:83:13"
                },
                {
                  "assignments": [
                    9054
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9054,
                      "name": "oracleCheckGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "17918:22:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9053,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17918:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9056,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 9055,
                    "name": "ORACLE_CHECK_GAS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7934,
                    "src": "17943:16:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17918:41:13"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9058,
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "17970:7:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 9057,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "17970:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9059,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17970:7:13"
                },
                {
                  "externalReferences": [
                    {
                      "checkCalldata": {
                        "declaration": 9043,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18060:13:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "checkCalldata": {
                        "declaration": 9043,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18088:13:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "ok": {
                        "declaration": 9058,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18010:2:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "oracleCheckGas": {
                        "declaration": 9054,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18027:14:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "_oracleAddr": {
                        "declaration": 9022,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18043:11:13",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 9060,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ok := staticcall(oracleCheckGas, _oracleAddr, add(checkCalldata, 0x20), mload(checkCalldata), 0, 0)\n}",
                  "src": "17987:144:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 9062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18133:3:13",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 9061,
                      "name": "ok",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "18134:2:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9066,
                  "nodeType": "IfStatement",
                  "src": "18129:46:13",
                  "trueBody": {
                    "id": 9065,
                    "nodeType": "Block",
                    "src": "18138:37:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 9063,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18159:5:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 9035,
                        "id": 9064,
                        "nodeType": "Return",
                        "src": "18152:12:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9068,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "18185:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9067,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18185:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9069,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18185:12:13"
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 9068,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18218:4:13",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 9070,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    size := returndatasize()\n}",
                  "src": "18207:46:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9071,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9068,
                      "src": "18255:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 9072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18263:2:13",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "18255:10:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9077,
                  "nodeType": "IfStatement",
                  "src": "18251:53:13",
                  "trueBody": {
                    "id": 9076,
                    "nodeType": "Block",
                    "src": "18267:37:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 9074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18288:5:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 9035,
                        "id": 9075,
                        "nodeType": "Return",
                        "src": "18281:12:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9079,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "18314:11:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 9078,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18314:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9080,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18314:11:13"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 9079,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18507:6:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 9068,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18450:4:13",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 9081,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    returndatacopy(ptr, 0, size)\n    result := mload(ptr)\n    mstore(ptr, 0)\n}",
                  "src": "18335:368:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9082,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9079,
                    "src": "18704:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9035,
                  "id": 9083,
                  "nodeType": "Return",
                  "src": "18697:13:13"
                }
              ]
            },
            "documentation": null,
            "id": 9085,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9022,
                  "name": "_oracleAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17546:22:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IACLOracle_$9690",
                    "typeString": "contract IACLOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9021,
                    "name": "IACLOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9690,
                    "src": "17546:10:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IACLOracle_$9690",
                      "typeString": "contract IACLOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9024,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17570:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9023,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17570:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9026,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17584:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9025,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17584:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9028,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17600:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9027,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "17600:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9031,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17615:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 9029,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17615:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9030,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "17615:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17545:85:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 9035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9034,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17654:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9033,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17654:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17653:6:13"
            },
            "scope": 9152,
            "src": "17525:1192:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9109,
              "nodeType": "Block",
              "src": "18878:135:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9094,
                        "name": "permissionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7956,
                        "src": "18888:17:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 9099,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9096,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9089,
                            "src": "18915:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 9097,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9091,
                            "src": "18921:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 9095,
                          "name": "roleHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9129,
                          "src": "18906:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 9098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18906:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "18888:40:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9100,
                      "name": "_newManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "18931:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18888:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 9102,
                  "nodeType": "ExpressionStatement",
                  "src": "18888:54:13"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9104,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9089,
                        "src": "18981:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9105,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9091,
                        "src": "18987:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9106,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9087,
                        "src": "18994:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9103,
                      "name": "ChangePermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7984,
                      "src": "18957:23:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,bytes32,address)"
                      }
                    },
                    "id": 9107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18957:49:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9108,
                  "nodeType": "EmitStatement",
                  "src": "18952:54:13"
                }
              ]
            },
            "documentation": "@dev Internal function that sets management",
            "id": 9110,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9087,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 9110,
                  "src": "18819:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9086,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18819:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9089,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 9110,
                  "src": "18840:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9088,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18840:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9091,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 9110,
                  "src": "18854:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9090,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18854:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18818:50:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 9093,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18878:0:13"
            },
            "scope": 9152,
            "src": "18788:225:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9128,
              "nodeType": "Block",
              "src": "19100:74:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "524f4c45",
                            "id": 9122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19144:6:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            "value": "ROLE"
                          },
                          {
                            "argumentTypes": null,
                            "id": 9123,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9112,
                            "src": "19152:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 9124,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9114,
                            "src": "19160:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9120,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "19127:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 9121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19127:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 9125,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19127:39:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 9119,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "19117:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 9126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19117:50:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 9118,
                  "id": 9127,
                  "nodeType": "Return",
                  "src": "19110:57:13"
                }
              ]
            },
            "documentation": null,
            "id": 9129,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "roleHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9112,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 9129,
                  "src": "19037:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9111,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19037:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9114,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 9129,
                  "src": "19053:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9113,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19053:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19036:31:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 9118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9129,
                  "src": "19091:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9116,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19091:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19090:9:13"
            },
            "scope": 9152,
            "src": "19019:155:13",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9150,
              "nodeType": "Block",
              "src": "19281:86:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "5045524d495353494f4e",
                            "id": 9143,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19325:12:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            "value": "PERMISSION"
                          },
                          {
                            "argumentTypes": null,
                            "id": 9144,
                            "name": "_who",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9131,
                            "src": "19339:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 9145,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9133,
                            "src": "19345:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 9146,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9135,
                            "src": "19353:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9141,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "19308:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 9142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19308:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 9147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19308:51:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 9140,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "19298:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 9148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19298:62:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 9139,
                  "id": 9149,
                  "nodeType": "Return",
                  "src": "19291:69:13"
                }
              ]
            },
            "documentation": null,
            "id": 9151,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "permissionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9131,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 9151,
                  "src": "19204:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19204:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9133,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 9151,
                  "src": "19218:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19218:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9135,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 9151,
                  "src": "19234:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9134,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19234:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19203:45:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 9139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9138,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9151,
                  "src": "19272:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9137,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19272:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19271:9:13"
            },
            "scope": 9152,
            "src": "19180:187:13",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 9153,
        "src": "293:19076:13"
      }
    ],
    "src": "0:19370:13"
  },
  "legacyAST": {
    "absolutePath": "@aragon/os/contracts/acl/ACL.sol",
    "exportedSymbols": {
      "ACL": [
        9152
      ]
    },
    "id": 9153,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7859,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:13"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "../apps/AragonApp.sol",
        "id": 7860,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 10490,
        "src": "25:31:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/ConversionHelpers.sol",
        "file": "../common/ConversionHelpers.sol",
        "id": 7861,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 10553,
        "src": "57:41:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/TimeHelpers.sol",
        "file": "../common/TimeHelpers.sol",
        "id": 7862,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 11201,
        "src": "99:35:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/ACLSyntaxSugar.sol",
        "file": "./ACLSyntaxSugar.sol",
        "id": 7863,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 9653,
        "src": "135:30:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACL.sol",
        "file": "./IACL.sol",
        "id": 7864,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 9674,
        "src": "166:20:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACLOracle.sol",
        "file": "./IACLOracle.sol",
        "id": 7865,
        "nodeType": "ImportDirective",
        "scope": 9153,
        "sourceUnit": 9691,
        "src": "187:26:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7866,
              "name": "IACL",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9673,
              "src": "309:4:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IACL_$9673",
                "typeString": "contract IACL"
              }
            },
            "id": 7867,
            "nodeType": "InheritanceSpecifier",
            "src": "309:4:13"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7868,
              "name": "TimeHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11200,
              "src": "315:11:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeHelpers_$11200",
                "typeString": "contract TimeHelpers"
              }
            },
            "id": 7869,
            "nodeType": "InheritanceSpecifier",
            "src": "315:11:13"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7870,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10489,
              "src": "328:9:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$10489",
                "typeString": "contract AragonApp"
              }
            },
            "id": 7871,
            "nodeType": "InheritanceSpecifier",
            "src": "328:9:13"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7872,
              "name": "ACLHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9652,
              "src": "339:10:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ACLHelpers_$9652",
                "typeString": "contract ACLHelpers"
              }
            },
            "id": 7873,
            "nodeType": "InheritanceSpecifier",
            "src": "339:10:13"
          }
        ],
        "contractDependencies": [
          9577,
          9652,
          9673,
          10365,
          10489,
          10502,
          10662,
          10712,
          10810,
          10838,
          10871,
          10908,
          11200,
          11422,
          11823,
          11850,
          13114
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 9152,
        "linearizedBaseContracts": [
          9152,
          9652,
          10489,
          9577,
          11823,
          13114,
          11850,
          10908,
          11422,
          10838,
          10662,
          10712,
          10502,
          10871,
          10810,
          11200,
          10365,
          9673
        ],
        "name": "ACL",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 7876,
            "name": "CREATE_PERMISSIONS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "494:116:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7874,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "494:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307830623731396233336338336238653564333030633532316362386235346165396264393333393936613134626566386332663465303238356432643234303061",
              "id": 7875,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "544:66:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5176166219463878559501968259997826055329110201998247721302853912956666789898_by_1",
                "typeString": "int_const 5176...(68 digits omitted)...9898"
              },
              "value": "0x0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "ACL.Op",
            "id": 7890,
            "members": [
              {
                "id": 7877,
                "name": "NONE",
                "nodeType": "EnumValue",
                "src": "627:4:13"
              },
              {
                "id": 7878,
                "name": "EQ",
                "nodeType": "EnumValue",
                "src": "633:2:13"
              },
              {
                "id": 7879,
                "name": "NEQ",
                "nodeType": "EnumValue",
                "src": "637:3:13"
              },
              {
                "id": 7880,
                "name": "GT",
                "nodeType": "EnumValue",
                "src": "642:2:13"
              },
              {
                "id": 7881,
                "name": "LT",
                "nodeType": "EnumValue",
                "src": "646:2:13"
              },
              {
                "id": 7882,
                "name": "GTE",
                "nodeType": "EnumValue",
                "src": "650:3:13"
              },
              {
                "id": 7883,
                "name": "LTE",
                "nodeType": "EnumValue",
                "src": "655:3:13"
              },
              {
                "id": 7884,
                "name": "RET",
                "nodeType": "EnumValue",
                "src": "660:3:13"
              },
              {
                "id": 7885,
                "name": "NOT",
                "nodeType": "EnumValue",
                "src": "665:3:13"
              },
              {
                "id": 7886,
                "name": "AND",
                "nodeType": "EnumValue",
                "src": "670:3:13"
              },
              {
                "id": 7887,
                "name": "OR",
                "nodeType": "EnumValue",
                "src": "675:2:13"
              },
              {
                "id": 7888,
                "name": "XOR",
                "nodeType": "EnumValue",
                "src": "679:3:13"
              },
              {
                "id": 7889,
                "name": "IF_ELSE",
                "nodeType": "EnumValue",
                "src": "684:7:13"
              }
            ],
            "name": "Op",
            "nodeType": "EnumDefinition",
            "src": "617:76:13"
          },
          {
            "canonicalName": "ACL.Param",
            "id": 7897,
            "members": [
              {
                "constant": false,
                "id": 7892,
                "name": "id",
                "nodeType": "VariableDeclaration",
                "scope": 7897,
                "src": "734:8:13",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 7891,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "734:5:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7894,
                "name": "op",
                "nodeType": "VariableDeclaration",
                "scope": 7897,
                "src": "752:8:13",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 7893,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "752:5:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7896,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 7897,
                "src": "770:13:13",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint240",
                  "typeString": "uint240"
                },
                "typeName": {
                  "id": 7895,
                  "name": "uint240",
                  "nodeType": "ElementaryTypeName",
                  "src": "770:7:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Param",
            "nodeType": "StructDefinition",
            "scope": 9152,
            "src": "711:299:13",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7900,
            "name": "BLOCK_NUMBER_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1016:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7898,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1016:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323030",
              "id": 7899,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1064:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_200_by_1",
                "typeString": "int_const 200"
              },
              "value": "200"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7903,
            "name": "TIMESTAMP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1073:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7901,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1073:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323031",
              "id": 7902,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1121:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_201_by_1",
                "typeString": "int_const 201"
              },
              "value": "201"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7906,
            "name": "ORACLE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1151:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7904,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1151:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323033",
              "id": 7905,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1199:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_203_by_1",
                "typeString": "int_const 203"
              },
              "value": "203"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7909,
            "name": "LOGIC_OP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1208:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7907,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1208:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323034",
              "id": 7908,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1256:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_204_by_1",
                "typeString": "int_const 204"
              },
              "value": "204"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7912,
            "name": "PARAM_VALUE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1265:51:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7910,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1265:5:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323035",
              "id": 7911,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1313:3:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_205_by_1",
                "typeString": "int_const 205"
              },
              "value": "205"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7915,
            "name": "EMPTY_PARAM_HASH",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1483:109:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7913,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1483:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307832393064656364393534386236326138643630333435613938383338366663383462613662633935343834303038663633363266393331363065663365353633",
              "id": 7914,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1526:66:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18569430475105882587588266137607568536673111973893317399460219858819262702947_by_1",
                "typeString": "int_const 1856...(69 digits omitted)...2947"
              },
              "value": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7920,
            "name": "NO_PERMISSION",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1598:50:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7916,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1598:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "30",
                  "id": 7918,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1646:1:13",
                  "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": 7917,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1638:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": "bytes32"
              },
              "id": 7919,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1638:10:13",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7926,
            "name": "ANY_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1654:48:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7921,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1654:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 7924,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1699:2:13",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 7923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1700:1:13",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 7922,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1691:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 7925,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1691:11:13",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7931,
            "name": "BURN_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1708:48:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7927,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1708:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 7929,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1754:1:13",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  },
                  "value": "1"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  }
                ],
                "id": 7928,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1746:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 7930,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1746:10:13",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 7934,
            "name": "ORACLE_CHECK_GAS",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1820:50:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 7932,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1820:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3330303030",
              "id": 7933,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1865:5:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_30000_by_1",
                "typeString": "int_const 30000"
              },
              "value": "30000"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 7937,
            "name": "ERROR_AUTH_INIT_KERNEL",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1877:71:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 7935,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1877:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f494e49545f4b45524e454c",
              "id": 7936,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1926:22:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b821e30579b9561be7f0b7b902ba336b331e39831108d09772a61766a2b465fb",
                "typeString": "literal_string \"ACL_AUTH_INIT_KERNEL\""
              },
              "value": "ACL_AUTH_INIT_KERNEL"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 7940,
            "name": "ERROR_AUTH_NO_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "1954:69:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 7938,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1954:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f4e4f5f4d414e41474552",
              "id": 7939,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2002:21:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e2d6e781abad74150d786cba50506e9dd4199308c8c71d28e79e0e9232faf41e",
                "typeString": "literal_string \"ACL_AUTH_NO_MANAGER\""
              },
              "value": "ACL_AUTH_NO_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 7943,
            "name": "ERROR_EXISTENT_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "2029:71:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 7941,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2029:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f4558495354454e545f4d414e41474552",
              "id": 7942,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2078:22:13",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4c0d68e0b4f86bab649749fdab1e22b7429153357a2704a5fd7b646a35ecc4d0",
                "typeString": "literal_string \"ACL_EXISTENT_MANAGER\""
              },
              "value": "ACL_EXISTENT_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 7947,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "2147:49:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
              "typeString": "mapping(bytes32 => bytes32)"
            },
            "typeName": {
              "id": 7946,
              "keyType": {
                "id": 7944,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2156:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2147:28:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                "typeString": "mapping(bytes32 => bytes32)"
              },
              "valueType": {
                "id": 7945,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2167:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 7952,
            "name": "permissionParams",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "2237:54:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
              "typeString": "mapping(bytes32 => struct ACL.Param[])"
            },
            "typeName": {
              "id": 7951,
              "keyType": {
                "id": 7948,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2246:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2237:28:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                "typeString": "mapping(bytes32 => struct ACL.Param[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 7949,
                  "name": "Param",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 7897,
                  "src": "2257:5:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                    "typeString": "struct ACL.Param"
                  }
                },
                "id": 7950,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2257:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                  "typeString": "struct ACL.Param[]"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 7956,
            "name": "permissionManager",
            "nodeType": "VariableDeclaration",
            "scope": 9152,
            "src": "2365:55:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 7955,
              "keyType": {
                "id": 7953,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2374:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2365:28:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 7954,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2385:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7966,
            "name": "SetPermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7958,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 7966,
                  "src": "2447:22:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7957,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2447:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7960,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 7966,
                  "src": "2471:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7959,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2471:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7962,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 7966,
                  "src": "2492:20:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7961,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2492:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7964,
                  "indexed": false,
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 7966,
                  "src": "2514:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7963,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2514:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2446:81:13"
            },
            "src": "2427:101:13"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7976,
            "name": "SetPermissionParams",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7968,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 7976,
                  "src": "2559:22:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7967,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2559:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7970,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 7976,
                  "src": "2583:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7969,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2583:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7972,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 7976,
                  "src": "2604:20:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7971,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2604:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7974,
                  "indexed": false,
                  "name": "paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 7976,
                  "src": "2626:18:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7973,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2626:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2558:87:13"
            },
            "src": "2533:113:13"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7984,
            "name": "ChangePermissionManager",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7978,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 7984,
                  "src": "2681:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7977,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2681:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7980,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 7984,
                  "src": "2702:20:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7979,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2702:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7982,
                  "indexed": true,
                  "name": "manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 7984,
                  "src": "2724:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2724:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2680:68:13"
            },
            "src": "2651:98:13"
          },
          {
            "body": {
              "id": 8002,
              "nodeType": "Block",
              "src": "2815:107:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7991,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "2833:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 7992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2833:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7994,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7986,
                              "src": "2868:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7995,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7988,
                              "src": "2874:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 7993,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8315,
                            "src": "2847:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 7996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2847:33:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2833:47:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7998,
                        "name": "ERROR_AUTH_NO_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7940,
                        "src": "2882:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 7990,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "2825:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2825:79:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8000,
                  "nodeType": "ExpressionStatement",
                  "src": "2825:79:13"
                },
                {
                  "id": 8001,
                  "nodeType": "PlaceholderStatement",
                  "src": "2914:1:13"
                }
              ]
            },
            "documentation": null,
            "id": 8003,
            "name": "onlyPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7986,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8003,
                  "src": "2786:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7985,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2786:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7988,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8003,
                  "src": "2800:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7987,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2800:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2785:29:13"
            },
            "src": "2755:167:13",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8022,
              "nodeType": "Block",
              "src": "2986:192:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8011,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8005,
                              "src": "3109:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8012,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8007,
                              "src": "3115:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8010,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8315,
                            "src": "3088:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 8013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3088:33:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8015,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3133:1:13",
                              "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": 8014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3125:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3125:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3088:47:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8018,
                        "name": "ERROR_EXISTENT_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7943,
                        "src": "3137:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 8009,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "3080:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3080:80:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8020,
                  "nodeType": "ExpressionStatement",
                  "src": "3080:80:13"
                },
                {
                  "id": 8021,
                  "nodeType": "PlaceholderStatement",
                  "src": "3170:1:13"
                }
              ]
            },
            "documentation": null,
            "id": 8023,
            "name": "noPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8005,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8023,
                  "src": "2957:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8004,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2957:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8007,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8023,
                  "src": "2971:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8006,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2971:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2956:29:13"
            },
            "src": "2928:250:13",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8051,
              "nodeType": "Block",
              "src": "3577:205:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8030,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10795,
                      "src": "3587:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3587:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8032,
                  "nodeType": "ExpressionStatement",
                  "src": "3587:13:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8040,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8034,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "3618:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3618:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 8037,
                                "name": "kernel",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10328,
                                "src": "3640:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IKernel_$12600_$",
                                  "typeString": "function () view returns (contract IKernel)"
                                }
                              },
                              "id": 8038,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3640:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKernel_$12600",
                                "typeString": "contract IKernel"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IKernel_$12600",
                                "typeString": "contract IKernel"
                              }
                            ],
                            "id": 8036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3632:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3632:17:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3618:31:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8041,
                        "name": "ERROR_AUTH_INIT_KERNEL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7937,
                        "src": "3651:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 8033,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "3610:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3610:64:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8043,
                  "nodeType": "ExpressionStatement",
                  "src": "3610:64:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8045,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "3703:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8046,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15248,
                        "src": "3724:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$9152",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8047,
                        "name": "CREATE_PERMISSIONS_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7876,
                        "src": "3730:23:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8048,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "3755:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$9152",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8044,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8493,
                      "src": "3685:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 8049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3685:90:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8050,
                  "nodeType": "ExpressionStatement",
                  "src": "3685:90:13"
                }
              ]
            },
            "documentation": "@dev Initialize can only be called once. It saves the block number in which it was initialized.\n@notice Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions\n@param _permissionsCreator Entity that will be given permission over createPermission",
            "id": 8052,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 8028,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8027,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10742,
                  "src": "3568:8:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3568:8:13"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8026,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8025,
                  "name": "_permissionsCreator",
                  "nodeType": "VariableDeclaration",
                  "scope": 8052,
                  "src": "3532:27:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8024,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3532:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3531:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8029,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3577:0:13"
            },
            "scope": 9152,
            "src": "3512:270:13",
            "stateMutability": "nonpayable",
            "superFunction": 9659,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8077,
              "nodeType": "Block",
              "src": "5044:66:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8071,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8054,
                        "src": "5072:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8072,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8056,
                        "src": "5081:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8073,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8058,
                        "src": "5087:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8074,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8060,
                        "src": "5094:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8070,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8493,
                      "src": "5054:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 8075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5054:49:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8076,
                  "nodeType": "ExpressionStatement",
                  "src": "5054:49:13"
                }
              ]
            },
            "documentation": "@dev Creates a permission that wasn't previously set and managed.\n     If a created permission is removed it is possible to reset it with createPermission.\n     This is the **ONLY** way to create permissions and set managers to permissions that don't\n     have a manager.\n     In terms of the ACL being initialized, this function implicitly protects all the other\n     state-changing external functions, as they all require the sender to be a manager.\n@notice Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform\n@param _manager Address of the entity that will be able to grant and revoke the permission further.",
            "id": 8078,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8063,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7876,
                    "src": "4974:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8064,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8062,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10409,
                  "src": "4969:4:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4969:29:13"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8066,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8056,
                    "src": "5027:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8067,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8058,
                    "src": "5033:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8068,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8065,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8023,
                  "src": "5007:19:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5007:32:13"
              }
            ],
            "name": "createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8054,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "4880:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8053,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4880:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8056,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "4897:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8055,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4897:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8058,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "4911:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8057,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4911:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8060,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "4926:16:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4926:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4879:64:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8069,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5044:0:13"
            },
            "scope": 9152,
            "src": "4854:256:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8098,
              "nodeType": "Block",
              "src": "5702:73:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8088,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8080,
                        "src": "5729:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8089,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8082,
                        "src": "5738:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8090,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8084,
                        "src": "5744:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5765:1:13",
                            "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": 8093,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "5751:13:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (uint256[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 8091,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5755:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8092,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "5755:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 8095,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5751:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8087,
                      "name": "grantPermissionP",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8135,
                      "src": "5712:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,bytes32,uint256[] memory)"
                      }
                    },
                    "id": 8096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5712:56:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8097,
                  "nodeType": "ExpressionStatement",
                  "src": "5712:56:13"
                }
              ]
            },
            "documentation": "@dev Grants permission if allowed. This requires `msg.sender` to be the permission manager\n@notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform",
            "id": 8099,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "grantPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8080,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8099,
                  "src": "5635:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8079,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5635:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8082,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8099,
                  "src": "5652:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8081,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5652:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8084,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8099,
                  "src": "5666:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8083,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5666:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5634:46:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8086,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5702:0:13"
            },
            "scope": 9152,
            "src": "5610:165:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8134,
              "nodeType": "Block",
              "src": "6489:156:13",
              "statements": [
                {
                  "assignments": [
                    8116
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8116,
                      "name": "paramsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 8135,
                      "src": "6499:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8115,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6499:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8126,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8120,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8117,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8108,
                          "src": "6520:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 8118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6520:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6537:1:13",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6520:18:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 8124,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7915,
                      "src": "6564:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 8125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6520:60:13",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8122,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8108,
                          "src": "6553:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 8121,
                        "name": "_saveParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8619,
                        "src": "6541:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint256[] memory) returns (bytes32)"
                        }
                      },
                      "id": 8123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6541:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6499:81:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8128,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8101,
                        "src": "6605:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8129,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8103,
                        "src": "6614:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8130,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8105,
                        "src": "6620:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8131,
                        "name": "paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8116,
                        "src": "6627:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8127,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8546,
                      "src": "6590:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 8132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6590:48:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8133,
                  "nodeType": "ExpressionStatement",
                  "src": "6590:48:13"
                }
              ]
            },
            "documentation": "@dev Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager\n@notice Grant `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n@param _role Identifier for the group of actions in app given access to perform\n@param _params Permission parameters",
            "id": 8135,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8111,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8103,
                    "src": "6472:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8112,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8105,
                    "src": "6478:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8113,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8110,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "6450:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6450:34:13"
              }
            ],
            "name": "grantPermissionP",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8101,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8135,
                  "src": "6362:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6362:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8103,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8135,
                  "src": "6379:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6379:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8105,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8135,
                  "src": "6393:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8104,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6393:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8108,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 8135,
                  "src": "6408:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8106,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6408:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8107,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6408:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6361:65:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8114,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6489:0:13"
            },
            "scope": 9152,
            "src": "6336:309:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8155,
              "nodeType": "Block",
              "src": "7223:68:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8149,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8137,
                        "src": "7248:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8150,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8139,
                        "src": "7257:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8151,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8141,
                        "src": "7263:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8152,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7920,
                        "src": "7270:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8148,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8546,
                      "src": "7233:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 8153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7233:51:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8154,
                  "nodeType": "ExpressionStatement",
                  "src": "7233:51:13"
                }
              ]
            },
            "documentation": "@dev Revokes permission if allowed. This requires `msg.sender` to be the the permission manager\n@notice Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`\n@param _entity Address of the whitelisted entity to revoke access from\n@param _app Address of the app in which the role will be revoked\n@param _role Identifier for the group of actions in app being revoked",
            "id": 8156,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8144,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8139,
                    "src": "7206:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8145,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8141,
                    "src": "7212:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8146,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8143,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "7184:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7184:34:13"
              }
            ],
            "name": "revokePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8142,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8137,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8156,
                  "src": "7113:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8136,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7113:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8139,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8156,
                  "src": "7130:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8138,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7130:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8141,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8156,
                  "src": "7144:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8140,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7144:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7112:46:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8147,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7223:0:13"
            },
            "scope": 9152,
            "src": "7087:204:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8175,
              "nodeType": "Block",
              "src": "7743:64:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8170,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8158,
                        "src": "7775:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8171,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8160,
                        "src": "7788:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8172,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8162,
                        "src": "7794:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8169,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "7753:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7753:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8174,
                  "nodeType": "ExpressionStatement",
                  "src": "7753:47:13"
                }
              ]
            },
            "documentation": "@notice Set `_newManager` as the manager of `_role` in `_app`\n@param _newManager Address for the new manager\n@param _app Address of the app in which the permission management is being transferred\n@param _role Identifier for the group of actions being transferred",
            "id": 8176,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8165,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8160,
                    "src": "7726:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8166,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8162,
                    "src": "7732:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8167,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8164,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "7704:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7704:34:13"
              }
            ],
            "name": "setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8158,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8176,
                  "src": "7629:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8157,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7629:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8160,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8176,
                  "src": "7650:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8159,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7650:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8162,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8176,
                  "src": "7664:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8161,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7664:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7628:50:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8168,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7743:0:13"
            },
            "scope": 9152,
            "src": "7599:208:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8195,
              "nodeType": "Block",
              "src": "8159:63:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8199:1:13",
                            "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": 8188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8191:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8191:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8191,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8178,
                        "src": "8203:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8192,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8180,
                        "src": "8209:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8187,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "8169:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8169:46:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8194,
                  "nodeType": "ExpressionStatement",
                  "src": "8169:46:13"
                }
              ]
            },
            "documentation": "@notice Remove the manager of `_role` in `_app`\n@param _app Address of the app in which the permission is being unmanaged\n@param _role Identifier for the group of actions being unmanaged",
            "id": 8196,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8183,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8178,
                    "src": "8142:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8184,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8180,
                    "src": "8148:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8185,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8182,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "8120:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8120:34:13"
              }
            ],
            "name": "removePermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8178,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "8066:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8177,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8066:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8180,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "8080:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8179,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8080:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8065:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8159:0:13"
            },
            "scope": 9152,
            "src": "8033:189:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8216,
              "nodeType": "Block",
              "src": "8673:64:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8211,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7931,
                        "src": "8705:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8212,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "8718:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8213,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8200,
                        "src": "8724:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8210,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "8683:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8683:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8215,
                  "nodeType": "ExpressionStatement",
                  "src": "8683:47:13"
                }
              ]
            },
            "documentation": "@notice Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n@param _app Address of the app in which the permission is being burned\n@param _role Identifier for the group of actions being burned",
            "id": 8217,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8203,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7876,
                    "src": "8603:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8204,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8202,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10409,
                  "src": "8598:4:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8598:29:13"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8206,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8198,
                    "src": "8656:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8207,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8200,
                    "src": "8662:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8208,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8205,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8023,
                  "src": "8636:19:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8636:32:13"
              }
            ],
            "name": "createBurnedPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8198,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8217,
                  "src": "8544:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8197,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8544:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8200,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8217,
                  "src": "8558:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8199,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8558:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8543:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8209,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8673:0:13"
            },
            "scope": 9152,
            "src": "8512:225:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8234,
              "nodeType": "Block",
              "src": "9138:64:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8229,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7931,
                        "src": "9170:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8230,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8219,
                        "src": "9183:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8231,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8221,
                        "src": "9189:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8228,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "9148:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9148:47:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8233,
                  "nodeType": "ExpressionStatement",
                  "src": "9148:47:13"
                }
              ]
            },
            "documentation": "@notice Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)\n@param _app Address of the app in which the permission is being burned\n@param _role Identifier for the group of actions being burned",
            "id": 8235,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8224,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8219,
                    "src": "9121:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8225,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8221,
                    "src": "9127:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 8226,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8223,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8003,
                  "src": "9099:21:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9099:34:13"
              }
            ],
            "name": "burnPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8219,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8235,
                  "src": "9045:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8218,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9045:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8221,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8235,
                  "src": "9059:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8220,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9059:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9044:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8227,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9138:0:13"
            },
            "scope": 9152,
            "src": "9014:188:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8257,
              "nodeType": "Block",
              "src": "9620:98:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8246,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7952,
                        "src": "9637:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 8254,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8247,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "9654:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 8253,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8249,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8237,
                              "src": "9681:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8250,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8239,
                              "src": "9690:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8251,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8241,
                              "src": "9696:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8248,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9151,
                            "src": "9666:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 8252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9666:36:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9654:49:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9637:67:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 8255,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9637:74:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8245,
                  "id": 8256,
                  "nodeType": "Return",
                  "src": "9630:81:13"
                }
              ]
            },
            "documentation": "@notice Get parameters for permission array length\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@return Length of the array",
            "id": 8258,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParamsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8237,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8258,
                  "src": "9545:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9545:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8239,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8258,
                  "src": "9562:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8238,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9562:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8241,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8258,
                  "src": "9576:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8240,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9576:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9544:46:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8244,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8258,
                  "src": "9614:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8243,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9614:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9613:6:13"
            },
            "scope": 9152,
            "src": "9510:208:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8297,
              "nodeType": "Block",
              "src": "10225:164:13",
              "statements": [
                {
                  "assignments": [
                    8276
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8276,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 8298,
                      "src": "10235:19:13",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8275,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7897,
                        "src": "10235:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8288,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8277,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7952,
                        "src": "10257:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 8285,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8278,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7947,
                          "src": "10274:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 8284,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8280,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8260,
                              "src": "10301:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8281,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8262,
                              "src": "10310:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8282,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8264,
                              "src": "10316:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8279,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9151,
                            "src": "10286:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 8283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10286:36:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10274:49:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10257:67:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 8287,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8286,
                      "name": "_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8266,
                      "src": "10325:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10257:75:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$7897_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10235:97:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8289,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8276,
                          "src": "10350:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 8290,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7892,
                        "src": "10350:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8291,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8276,
                          "src": "10360:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 8292,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "op",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7894,
                        "src": "10360:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8293,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8276,
                          "src": "10370:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 8294,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7896,
                        "src": "10370:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "id": 8295,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "10349:33:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_uint8_$_t_uint240_$",
                      "typeString": "tuple(uint8,uint8,uint240)"
                    }
                  },
                  "functionReturnParameters": 8274,
                  "id": 8296,
                  "nodeType": "Return",
                  "src": "10342:40:13"
                }
              ]
            },
            "documentation": "@notice Get parameter for permission\n@param _entity Address of the whitelisted entity that will be able to perform the role\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@param _index Index of parameter in the array\n@return Parameter (id, op, value)",
            "id": 8298,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8260,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10092:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8259,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10092:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8262,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10109:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10109:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8264,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10123:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8263,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10123:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8266,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10138:11:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8265,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10138:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10091:59:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8269,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10198:5:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8268,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10198:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8271,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10205:5:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8270,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10205:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8273,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8298,
                  "src": "10212:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  },
                  "typeName": {
                    "id": 8272,
                    "name": "uint240",
                    "nodeType": "ElementaryTypeName",
                    "src": "10212:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint240",
                      "typeString": "uint240"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10197:23:13"
            },
            "scope": 9152,
            "src": "10064:325:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8314,
              "nodeType": "Block",
              "src": "10690:64:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8307,
                      "name": "permissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7956,
                      "src": "10707:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 8312,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8309,
                          "name": "_app",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8300,
                          "src": "10734:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8310,
                          "name": "_role",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8302,
                          "src": "10740:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 8308,
                        "name": "roleHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9129,
                        "src": "10725:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 8311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10725:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10707:40:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8306,
                  "id": 8313,
                  "nodeType": "Return",
                  "src": "10700:47:13"
                }
              ]
            },
            "documentation": "@dev Get manager for permission\n@param _app Address of the app\n@param _role Identifier for a group of actions in app\n@return address of the manager for the permission",
            "id": 8315,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8300,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8315,
                  "src": "10631:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8299,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10631:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8302,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8315,
                  "src": "10645:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8301,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10645:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10630:29:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8306,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8305,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8315,
                  "src": "10681:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8304,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10681:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10680:9:13"
            },
            "scope": 9152,
            "src": "10601:153:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8338,
              "nodeType": "Block",
              "src": "11234:115:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8329,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8317,
                        "src": "11265:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8330,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8319,
                        "src": "11271:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8331,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8321,
                        "src": "11279:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8334,
                            "name": "_how",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8323,
                            "src": "11336:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8332,
                            "name": "ConversionHelpers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10552,
                            "src": "11286:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ConversionHelpers_$10552_$",
                              "typeString": "type(library ConversionHelpers)"
                            }
                          },
                          "id": 8333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "dangerouslyCastBytesToUintArray",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10551,
                          "src": "11286:49:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (uint256[] memory)"
                          }
                        },
                        "id": 8335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11286:55:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8328,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8339,
                        8406,
                        8435
                      ],
                      "referencedDeclaration": 8406,
                      "src": "11251:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11251:91:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8327,
                  "id": 8337,
                  "nodeType": "Return",
                  "src": "11244:98:13"
                }
              ]
            },
            "documentation": "@dev Function called by apps to check ACL on kernel or to check permission statu\n@param _who Sender of the original call\n@param _where Address of the app\n@param _where Identifier for a group of actions in app\n@param _how Permission parameters\n@return boolean indicating whether the ACL allows the role or not",
            "id": 8339,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8317,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11143:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8316,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11143:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8319,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11157:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11157:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8321,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11173:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8320,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11173:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8323,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11188:17:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8322,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11188:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11142:64:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8326,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8339,
                  "src": "11228:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8325,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11228:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11227:6:13"
            },
            "scope": 9152,
            "src": "11120:229:13",
            "stateMutability": "view",
            "superFunction": 9672,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8405,
              "nodeType": "Block",
              "src": "11473:457:13",
              "statements": [
                {
                  "assignments": [
                    8354
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8354,
                      "name": "whoParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 8406,
                      "src": "11483:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8353,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11483:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8362,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8355,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7947,
                      "src": "11503:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 8361,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8357,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8341,
                          "src": "11530:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8358,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8343,
                          "src": "11536:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8359,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8345,
                          "src": "11544:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 8356,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9151,
                        "src": "11515:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 8360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11515:35:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11503:48:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11483:68:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 8365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8363,
                        "name": "whoParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8354,
                        "src": "11565:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8364,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7920,
                        "src": "11578:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11565:26:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8367,
                          "name": "whoParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8354,
                          "src": "11606:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8368,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8341,
                          "src": "11617:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8369,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8343,
                          "src": "11623:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8370,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8345,
                          "src": "11631:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8371,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8348,
                          "src": "11638:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 8366,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8468,
                        "src": "11595:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                        }
                      },
                      "id": 8372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11595:48:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11565:78:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8377,
                  "nodeType": "IfStatement",
                  "src": "11561:120:13",
                  "trueBody": {
                    "id": 8376,
                    "nodeType": "Block",
                    "src": "11645:36:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11666:4:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8352,
                        "id": 8375,
                        "nodeType": "Return",
                        "src": "11659:11:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8379,
                      "name": "anyParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 8406,
                      "src": "11691:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8378,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11691:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8387,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8380,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7947,
                      "src": "11711:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 8386,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8382,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7926,
                          "src": "11738:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8383,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8343,
                          "src": "11750:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8384,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8345,
                          "src": "11758:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 8381,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9151,
                        "src": "11723:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 8385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11723:41:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11711:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11691:74:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8398,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 8390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8388,
                        "name": "anyParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8379,
                        "src": "11779:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8389,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7920,
                        "src": "11792:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11779:26:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8392,
                          "name": "anyParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8379,
                          "src": "11820:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8393,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7926,
                          "src": "11831:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8394,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8343,
                          "src": "11843:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8395,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8345,
                          "src": "11851:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8396,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8348,
                          "src": "11858:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        ],
                        "id": 8391,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8468,
                        "src": "11809:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                        }
                      },
                      "id": 8397,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11809:54:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11779:84:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8402,
                  "nodeType": "IfStatement",
                  "src": "11775:126:13",
                  "trueBody": {
                    "id": 8401,
                    "nodeType": "Block",
                    "src": "11865:36:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11886:4:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8352,
                        "id": 8400,
                        "nodeType": "Return",
                        "src": "11879:11:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 8403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11918:5:13",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 8352,
                  "id": 8404,
                  "nodeType": "Return",
                  "src": "11911:12:13"
                }
              ]
            },
            "documentation": null,
            "id": 8406,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8341,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11378:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8340,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11378:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8343,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11392:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8342,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11392:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8345,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11408:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8344,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11408:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8348,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11423:21:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8346,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11423:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8347,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11423:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11377:68:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8352,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8351,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8406,
                  "src": "11467:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8350,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11467:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11466:6:13"
            },
            "scope": 9152,
            "src": "11355:575:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8434,
              "nodeType": "Block",
              "src": "12031:116:13",
              "statements": [
                {
                  "assignments": [
                    8420
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8420,
                      "name": "empty",
                      "nodeType": "VariableDeclaration",
                      "scope": 8435,
                      "src": "12041:22:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12041:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8419,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12041:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8426,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12080:1:13",
                        "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": 8423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "12066:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12070:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8422,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12070:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 8425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12066:16:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12041:41:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8428,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8408,
                        "src": "12113:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8429,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8410,
                        "src": "12119:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8430,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8412,
                        "src": "12127:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8431,
                        "name": "empty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8420,
                        "src": "12134:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8427,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8339,
                        8406,
                        8435
                      ],
                      "referencedDeclaration": 8406,
                      "src": "12099:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8432,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12099:41:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8416,
                  "id": 8433,
                  "nodeType": "Return",
                  "src": "12092:48:13"
                }
              ]
            },
            "documentation": null,
            "id": 8435,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8408,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8435,
                  "src": "11959:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8407,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11959:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8410,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8435,
                  "src": "11973:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11973:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8412,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8435,
                  "src": "11989:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8411,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11989:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11958:45:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8415,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8435,
                  "src": "12025:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8414,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12025:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12024:6:13"
            },
            "scope": 9152,
            "src": "11936:211:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8467,
              "nodeType": "Block",
              "src": "12332:160:13",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 8453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8451,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8437,
                      "src": "12346:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8452,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7915,
                      "src": "12361:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12346:31:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8457,
                  "nodeType": "IfStatement",
                  "src": "12342:73:13",
                  "trueBody": {
                    "id": 8456,
                    "nodeType": "Block",
                    "src": "12379:36:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12400:4:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8450,
                        "id": 8455,
                        "nodeType": "Return",
                        "src": "12393:11:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8459,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8437,
                        "src": "12443:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8460,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12456:1:13",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 8461,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8439,
                        "src": "12459:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8462,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8441,
                        "src": "12465:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8463,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8443,
                        "src": "12473:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8464,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8446,
                        "src": "12480:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8458,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8787,
                      "src": "12432:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12432:53:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8450,
                  "id": 8466,
                  "nodeType": "Return",
                  "src": "12425:60:13"
                }
              ]
            },
            "documentation": null,
            "id": 8468,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "evalParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8447,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8437,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12182:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8436,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12182:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8439,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12211:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12211:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8441,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12233:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12233:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8443,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12257:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8442,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12257:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8446,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12280:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8444,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12280:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8445,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12280:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12172:128:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8449,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8468,
                  "src": "12322:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8448,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12322:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12321:6:13"
            },
            "scope": 9152,
            "src": "12153:339:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8492,
              "nodeType": "Block",
              "src": "12698:125:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8480,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8470,
                        "src": "12723:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8481,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8472,
                        "src": "12732:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8482,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8474,
                        "src": "12738:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8483,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7915,
                        "src": "12745:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8479,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8546,
                      "src": "12708:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 8484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12708:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8485,
                  "nodeType": "ExpressionStatement",
                  "src": "12708:54:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8487,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8476,
                        "src": "12794:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8488,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8472,
                        "src": "12804:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8489,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8474,
                        "src": "12810:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8486,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9110,
                      "src": "12772:21:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 8490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12772:44:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8491,
                  "nodeType": "ExpressionStatement",
                  "src": "12772:44:13"
                }
              ]
            },
            "documentation": "@dev Internal createPermission for access inside the kernel (on instantiation)",
            "id": 8493,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8470,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8493,
                  "src": "12625:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8469,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12625:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8472,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8493,
                  "src": "12642:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8471,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12642:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8474,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8493,
                  "src": "12656:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8473,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12656:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8476,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8493,
                  "src": "12671:16:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12671:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12624:64:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8478,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12698:0:13"
            },
            "scope": 9152,
            "src": "12598:225:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8545,
              "nodeType": "Block",
              "src": "13012:426:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8504,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7947,
                        "src": "13022:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                          "typeString": "mapping(bytes32 => bytes32)"
                        }
                      },
                      "id": 8510,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8506,
                            "name": "_entity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8495,
                            "src": "13049:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8507,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8497,
                            "src": "13058:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8508,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8499,
                            "src": "13064:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 8505,
                          "name": "permissionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9151,
                          "src": "13034:14:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 8509,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13034:36:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13022:49:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8511,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8501,
                      "src": "13074:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13022:63:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 8513,
                  "nodeType": "ExpressionStatement",
                  "src": "13022:63:13"
                },
                {
                  "assignments": [
                    8515
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8515,
                      "name": "entityHasPermission",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "13095:24:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8514,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13095:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8519,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 8518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8516,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8501,
                      "src": "13122:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8517,
                      "name": "NO_PERMISSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7920,
                      "src": "13137:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13122:28:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13095:55:13"
                },
                {
                  "assignments": [
                    8521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8521,
                      "name": "permissionHasParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "13160:24:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8520,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13160:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8527,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8522,
                      "name": "entityHasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8515,
                      "src": "13187:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 8525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8523,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8501,
                        "src": "13210:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8524,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7915,
                        "src": "13225:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "13210:31:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13187:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13160:81:13"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8529,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8495,
                        "src": "13271:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8530,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8497,
                        "src": "13280:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8531,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8499,
                        "src": "13286:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8532,
                        "name": "entityHasPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8515,
                        "src": "13293:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 8528,
                      "name": "SetPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7966,
                      "src": "13257:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bytes32,bool)"
                      }
                    },
                    "id": 8533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13257:56:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8534,
                  "nodeType": "EmitStatement",
                  "src": "13252:61:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 8535,
                    "name": "permissionHasParams",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8521,
                    "src": "13327:19:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8544,
                  "nodeType": "IfStatement",
                  "src": "13323:109:13",
                  "trueBody": {
                    "id": 8543,
                    "nodeType": "Block",
                    "src": "13348:84:13",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8537,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8495,
                              "src": "13387:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8538,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8497,
                              "src": "13396:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8539,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8499,
                              "src": "13402:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8540,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8501,
                              "src": "13409:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8536,
                            "name": "SetPermissionParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7976,
                            "src": "13367:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,bytes32,bytes32)"
                            }
                          },
                          "id": 8541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13367:54:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8542,
                        "nodeType": "EmitStatement",
                        "src": "13362:59:13"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Internal function called to actually save the permission",
            "id": 8546,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8495,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8546,
                  "src": "12936:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8494,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12936:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8497,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 8546,
                  "src": "12953:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8496,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12953:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8499,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 8546,
                  "src": "12967:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8498,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12967:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8501,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 8546,
                  "src": "12982:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8500,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12982:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12935:67:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8503,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13012:0:13"
            },
            "scope": 9152,
            "src": "12912:526:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8618,
              "nodeType": "Block",
              "src": "13518:540:13",
              "statements": [
                {
                  "assignments": [
                    8555
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8555,
                      "name": "paramHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 8619,
                      "src": "13528:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8554,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13528:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8562,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8559,
                            "name": "_encodedParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8549,
                            "src": "13575:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8557,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "13558:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 8558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13558:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 8560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13558:32:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 8556,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "13548:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 8561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13548:43:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13528:63:13"
                },
                {
                  "assignments": [
                    8566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8566,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 8619,
                      "src": "13601:22:13",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                        "typeString": "struct ACL.Param[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 8564,
                          "name": "Param",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 7897,
                          "src": "13601:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                            "typeString": "struct ACL.Param"
                          }
                        },
                        "id": 8565,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "13601:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8570,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8567,
                      "name": "permissionParams",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7952,
                      "src": "13626:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                      }
                    },
                    "id": 8569,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8568,
                      "name": "paramHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8555,
                      "src": "13643:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13626:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                      "typeString": "struct ACL.Param storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13601:52:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8571,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8566,
                        "src": "13668:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param storage ref[] storage pointer"
                        }
                      },
                      "id": 8572,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13668:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13685:1:13",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13668:18:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8615,
                  "nodeType": "IfStatement",
                  "src": "13664:361:13",
                  "trueBody": {
                    "id": 8614,
                    "nodeType": "Block",
                    "src": "13688:337:13",
                    "statements": [
                      {
                        "body": {
                          "id": 8612,
                          "nodeType": "Block",
                          "src": "13781:234:13",
                          "statements": [
                            {
                              "assignments": [
                                8587
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8587,
                                  "name": "encodedParam",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8619,
                                  "src": "13799:20:13",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8586,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13799:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8591,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8588,
                                  "name": "_encodedParams",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8549,
                                  "src": "13822:14:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 8590,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8589,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8576,
                                  "src": "13837:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13822:17:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13799:40:13"
                            },
                            {
                              "assignments": [
                                8593
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8593,
                                  "name": "param",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8619,
                                  "src": "13857:18:13",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                    "typeString": "struct ACL.Param"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 8592,
                                    "name": "Param",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 7897,
                                    "src": "13857:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                                      "typeString": "struct ACL.Param"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8605,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8596,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8587,
                                        "src": "13898:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 8595,
                                      "name": "decodeParamId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9611,
                                      "src": "13884:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 8597,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13884:27:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8599,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8587,
                                        "src": "13927:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 8598,
                                      "name": "decodeParamOp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9594,
                                      "src": "13913:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 8600,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13913:27:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 8602,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8587,
                                        "src": "13950:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 8601,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "13942:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint240_$",
                                        "typeString": "type(uint240)"
                                      },
                                      "typeName": "uint240"
                                    },
                                    "id": 8603,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13942:21:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 8594,
                                  "name": "Param",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7897,
                                  "src": "13878:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Param_$7897_storage_ptr_$",
                                    "typeString": "type(struct ACL.Param storage pointer)"
                                  }
                                },
                                "id": 8604,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13878:86:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$7897_memory",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13857:107:13"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8609,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8593,
                                    "src": "13994:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8606,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8566,
                                    "src": "13982:6:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage_ptr",
                                      "typeString": "struct ACL.Param storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 8608,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13982:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Param_$7897_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct ACL.Param storage ref) returns (uint256)"
                                  }
                                },
                                "id": 8610,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13982:18:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8611,
                              "nodeType": "ExpressionStatement",
                              "src": "13982:18:13"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8579,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8576,
                            "src": "13749:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8580,
                              "name": "_encodedParams",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8549,
                              "src": "13753:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 8581,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "13753:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13749:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8613,
                        "initializationExpression": {
                          "assignments": [
                            8576
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 8576,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 8619,
                              "src": "13734:9:13",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 8575,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "13734:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 8578,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13746:1:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "13734:13:13"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8584,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "13776:3:13",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 8583,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8576,
                              "src": "13776:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8585,
                          "nodeType": "ExpressionStatement",
                          "src": "13776:3:13"
                        },
                        "nodeType": "ForStatement",
                        "src": "13729:286:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8616,
                    "name": "paramHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8555,
                    "src": "14042:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 8553,
                  "id": 8617,
                  "nodeType": "Return",
                  "src": "14035:16:13"
                }
              ]
            },
            "documentation": null,
            "id": 8619,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_saveParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8549,
                  "name": "_encodedParams",
                  "nodeType": "VariableDeclaration",
                  "scope": 8619,
                  "src": "13465:24:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8547,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13465:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8548,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13465:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13464:26:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8552,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8619,
                  "src": "13509:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8551,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13509:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13508:9:13"
            },
            "scope": 9152,
            "src": "13444:614:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8786,
              "nodeType": "Block",
              "src": "14270:1208:13",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8637,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8623,
                      "src": "14284:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8638,
                          "name": "permissionParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7952,
                          "src": "14296:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                          }
                        },
                        "id": 8640,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 8639,
                          "name": "_paramsHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8621,
                          "src": "14313:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14296:29:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                          "typeString": "struct ACL.Param storage ref[] storage ref"
                        }
                      },
                      "id": 8641,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14296:36:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14284:48:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8646,
                  "nodeType": "IfStatement",
                  "src": "14280:108:13",
                  "trueBody": {
                    "id": 8645,
                    "nodeType": "Block",
                    "src": "14334:54:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 8643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14355:5:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 8636,
                        "id": 8644,
                        "nodeType": "Return",
                        "src": "14348:12:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8648
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8648,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 8787,
                      "src": "14398:18:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8647,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7897,
                        "src": "14398:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8654,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8649,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7952,
                        "src": "14419:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$7897_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 8651,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8650,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8621,
                        "src": "14436:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14419:29:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$7897_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 8653,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8652,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8623,
                      "src": "14449:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14419:39:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$7897_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14398:60:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 8658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8655,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8648,
                        "src": "14473:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 8656,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7892,
                      "src": "14473:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8657,
                      "name": "LOGIC_OP_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7909,
                      "src": "14485:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14473:29:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8669,
                  "nodeType": "IfStatement",
                  "src": "14469:124:13",
                  "trueBody": {
                    "id": 8668,
                    "nodeType": "Block",
                    "src": "14504:89:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8660,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8648,
                              "src": "14536:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8661,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8621,
                              "src": "14543:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8662,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8625,
                              "src": "14556:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8663,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8627,
                              "src": "14562:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8664,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8629,
                              "src": "14570:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8665,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8632,
                              "src": "14577:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 8659,
                            "name": "_evalLogic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8952,
                            "src": "14525:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Param_$7897_memory_ptr_$_t_bytes32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct ACL.Param memory,bytes32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 8666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14525:57:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8636,
                        "id": 8667,
                        "nodeType": "Return",
                        "src": "14518:64:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8671,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 8787,
                      "src": "14603:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8670,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14603:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8672,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14603:13:13"
                },
                {
                  "assignments": [
                    8674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8674,
                      "name": "comparedTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 8787,
                      "src": "14626:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8673,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14626:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8679,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8676,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8648,
                          "src": "14655:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 8677,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7896,
                        "src": "14655:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      ],
                      "id": 8675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14647:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 8678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14647:20:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14626:41:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 8683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8680,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8648,
                        "src": "14703:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 8681,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7892,
                      "src": "14703:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8682,
                      "name": "ORACLE_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7906,
                      "src": "14715:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14703:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 8708,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8705,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8648,
                          "src": "14874:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 8706,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7892,
                        "src": "14874:8:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8707,
                        "name": "BLOCK_NUMBER_PARAM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7900,
                        "src": "14886:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "14874:33:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 8718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8715,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8648,
                            "src": "14968:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8716,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7892,
                          "src": "14968:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8717,
                          "name": "TIMESTAMP_PARAM_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7903,
                          "src": "14980:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "14968:30:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 8728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8725,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8648,
                              "src": "15057:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 8726,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7892,
                            "src": "15057:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 8727,
                            "name": "PARAM_VALUE_PARAM_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7912,
                            "src": "15069:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15057:32:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8757,
                          "nodeType": "Block",
                          "src": "15150:176:13",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8741,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8737,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8648,
                                    "src": "15168:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  },
                                  "id": 8738,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7892,
                                  "src": "15168:8:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8739,
                                    "name": "_how",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8632,
                                    "src": "15180:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 8740,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "15180:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15168:23:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 8745,
                              "nodeType": "IfStatement",
                              "src": "15164:74:13",
                              "trueBody": {
                                "id": 8744,
                                "nodeType": "Block",
                                "src": "15193:45:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "hexValue": "66616c7365",
                                      "id": 8742,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "15218:5:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    "functionReturnParameters": 8636,
                                    "id": 8743,
                                    "nodeType": "Return",
                                    "src": "15211:12:13"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8746,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8671,
                                  "src": "15251:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 8749,
                                            "name": "_how",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8632,
                                            "src": "15275:4:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 8752,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 8750,
                                              "name": "param",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8648,
                                              "src": "15280:5:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                                "typeString": "struct ACL.Param memory"
                                              }
                                            },
                                            "id": 8751,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "id",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 7892,
                                            "src": "15280:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "15275:14:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 8748,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15267:7:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint240_$",
                                          "typeString": "type(uint240)"
                                        },
                                        "typeName": "uint240"
                                      },
                                      "id": 8753,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15267:23:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 8747,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15259:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 8754,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15259:32:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15251:40:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8756,
                              "nodeType": "ExpressionStatement",
                              "src": "15251:40:13"
                            }
                          ]
                        },
                        "id": 8758,
                        "nodeType": "IfStatement",
                        "src": "15053:273:13",
                        "trueBody": {
                          "id": 8736,
                          "nodeType": "Block",
                          "src": "15091:53:13",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8734,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8729,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8671,
                                  "src": "15105:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8731,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8648,
                                        "src": "15121:5:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 8732,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7896,
                                      "src": "15121:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 8730,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15113:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 8733,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15113:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15105:28:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8735,
                              "nodeType": "ExpressionStatement",
                              "src": "15105:28:13"
                            }
                          ]
                        }
                      },
                      "id": 8759,
                      "nodeType": "IfStatement",
                      "src": "14964:362:13",
                      "trueBody": {
                        "id": 8724,
                        "nodeType": "Block",
                        "src": "15000:47:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8722,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8719,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8671,
                                "src": "15014:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 8720,
                                  "name": "getTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11188,
                                  "src": "15022:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 8721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15022:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15014:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8723,
                            "nodeType": "ExpressionStatement",
                            "src": "15014:22:13"
                          }
                        ]
                      }
                    },
                    "id": 8760,
                    "nodeType": "IfStatement",
                    "src": "14870:456:13",
                    "trueBody": {
                      "id": 8714,
                      "nodeType": "Block",
                      "src": "14909:49:13",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8709,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8671,
                              "src": "14923:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 8710,
                                "name": "getBlockNumber",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11168,
                                "src": "14931:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 8711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14931:16:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "14923:24:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8713,
                          "nodeType": "ExpressionStatement",
                          "src": "14923:24:13"
                        }
                      ]
                    }
                  },
                  "id": 8761,
                  "nodeType": "IfStatement",
                  "src": "14699:627:13",
                  "trueBody": {
                    "id": 8704,
                    "nodeType": "Block",
                    "src": "14732:132:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8684,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8671,
                            "src": "14746:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8687,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8648,
                                        "src": "14777:5:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 8688,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7896,
                                      "src": "14777:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 8686,
                                    "name": "IACLOracle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9690,
                                    "src": "14766:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IACLOracle_$9690_$",
                                      "typeString": "type(contract IACLOracle)"
                                    }
                                  },
                                  "id": 8689,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14766:23:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IACLOracle_$9690",
                                    "typeString": "contract IACLOracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8690,
                                  "name": "_who",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8625,
                                  "src": "14791:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8691,
                                  "name": "_where",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8627,
                                  "src": "14797:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8692,
                                  "name": "_what",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8629,
                                  "src": "14805:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8693,
                                  "name": "_how",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8632,
                                  "src": "14812:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IACLOracle_$9690",
                                    "typeString": "contract IACLOracle"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 8685,
                                "name": "checkOracle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9085,
                                "src": "14754:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_contract$_IACLOracle_$9690_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (contract IACLOracle,address,address,bytes32,uint256[] memory) view returns (bool)"
                                }
                              },
                              "id": 8694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14754:63:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8696,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14824:1:13",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 8697,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "14754:71:13",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 8695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14820:1:13",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "14746:79:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8699,
                        "nodeType": "ExpressionStatement",
                        "src": "14746:79:13"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8700,
                            "name": "comparedTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8674,
                            "src": "14839:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 8701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14852:1:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "14839:14:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8703,
                        "nodeType": "ExpressionStatement",
                        "src": "14839:14:13"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8763,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8648,
                            "src": "15343:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8764,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7894,
                          "src": "15343:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 8762,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "15340:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8765,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15340:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8766,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "15356:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "RET",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15356:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15340:22:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8776,
                  "nodeType": "IfStatement",
                  "src": "15336:78:13",
                  "trueBody": {
                    "id": 8775,
                    "nodeType": "Block",
                    "src": "15364:50:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8770,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8671,
                                "src": "15393:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8769,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15385:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 8771,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15385:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15402:1:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15385:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8636,
                        "id": 8774,
                        "nodeType": "Return",
                        "src": "15378:25:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8778,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8671,
                        "src": "15439:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8780,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8648,
                              "src": "15449:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 8781,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7894,
                            "src": "15449:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 8779,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "15446:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15446:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8783,
                        "name": "comparedTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8674,
                        "src": "15460:10:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8777,
                      "name": "compare",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9020,
                      "src": "15431:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_Op_$7890_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256,enum ACL.Op,uint256) pure returns (bool)"
                      }
                    },
                    "id": 8784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15431:40:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8636,
                  "id": 8785,
                  "nodeType": "Return",
                  "src": "15424:47:13"
                }
              ]
            },
            "documentation": null,
            "id": 8787,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8621,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14093:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8620,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14093:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8623,
                  "name": "_paramId",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14122:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 8622,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14122:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8625,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14147:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8624,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14147:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8627,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14169:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8626,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14169:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8629,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14193:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8628,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14193:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8632,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14216:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8630,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14216:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8631,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "14216:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14083:153:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8636,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8635,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8787,
                  "src": "14260:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8634,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14260:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14259:6:13"
            },
            "scope": 9152,
            "src": "14064:1414:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8951,
              "nodeType": "Block",
              "src": "15657:1131:13",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8806,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8789,
                            "src": "15674:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8807,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7894,
                          "src": "15674:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 8805,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "15671:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8808,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15671:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8809,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "15688:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8810,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "IF_ELSE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15688:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15671:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8857,
                  "nodeType": "IfStatement",
                  "src": "15667:450:13",
                  "trueBody": {
                    "id": 8856,
                    "nodeType": "Block",
                    "src": "15700:417:13",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8813,
                            "name": "conditionParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 8952,
                            "src": "15714:21:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 8812,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15714:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8814,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15714:21:13"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8816,
                            "name": "successParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 8952,
                            "src": "15749:19:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 8815,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15749:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8817,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15749:19:13"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8819,
                            "name": "failureParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 8952,
                            "src": "15782:19:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 8818,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15782:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8820,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15782:19:13"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 8821,
                                "name": "conditionParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8813,
                                "src": "15817:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8822,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8816,
                                "src": "15833:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8823,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8819,
                                "src": "15847:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "id": 8824,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "15816:44:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8827,
                                      "name": "_param",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8789,
                                      "src": "15888:6:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                        "typeString": "struct ACL.Param memory"
                                      }
                                    },
                                    "id": 8828,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7896,
                                    "src": "15888:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 8826,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15880:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 8829,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15880:21:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8825,
                              "name": "decodeParamsList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9651,
                              "src": "15863:16:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                                "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                              }
                            },
                            "id": 8830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15863:39:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "src": "15816:86:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8832,
                        "nodeType": "ExpressionStatement",
                        "src": "15816:86:13"
                      },
                      {
                        "assignments": [
                          8834
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8834,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 8952,
                            "src": "15916:11:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 8833,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "15916:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8843,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8836,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8791,
                              "src": "15941:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8837,
                              "name": "conditionParam",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8813,
                              "src": "15954:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8838,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8793,
                              "src": "15970:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8839,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8795,
                              "src": "15976:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8840,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8797,
                              "src": "15984:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8841,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8800,
                              "src": "15991:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 8835,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8787,
                            "src": "15930:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 8842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15930:66:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15916:80:13"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8845,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8791,
                              "src": "16029:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "id": 8846,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8834,
                                "src": "16042:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 8848,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8819,
                                "src": "16066:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 8849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "16042:36:13",
                              "trueExpression": {
                                "argumentTypes": null,
                                "id": 8847,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8816,
                                "src": "16051:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8850,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8793,
                              "src": "16080:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8851,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8795,
                              "src": "16086:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8852,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8797,
                              "src": "16094:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8853,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8800,
                              "src": "16101:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 8844,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8787,
                            "src": "16018:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                            }
                          },
                          "id": 8854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16018:88:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8804,
                        "id": 8855,
                        "nodeType": "Return",
                        "src": "16011:95:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8859,
                      "name": "param1",
                      "nodeType": "VariableDeclaration",
                      "scope": 8952,
                      "src": "16127:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 8858,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16127:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8860,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16127:13:13"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8862,
                      "name": "param2",
                      "nodeType": "VariableDeclaration",
                      "scope": 8952,
                      "src": "16150:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 8861,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16150:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8863,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16150:13:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 8864,
                          "name": "param1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8859,
                          "src": "16175:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8865,
                          "name": "param2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8862,
                          "src": "16183:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        null
                      ],
                      "id": 8866,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "16174:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$__$",
                        "typeString": "tuple(uint32,uint32,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8869,
                                "name": "_param",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8789,
                                "src": "16219:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "id": 8870,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7896,
                              "src": "16219:12:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            ],
                            "id": 8868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16211:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 8871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16211:21:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8867,
                        "name": "decodeParamsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9651,
                        "src": "16194:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                          "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                        }
                      },
                      "id": 8872,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16194:39:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32,uint32)"
                      }
                    },
                    "src": "16174:59:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8874,
                  "nodeType": "ExpressionStatement",
                  "src": "16174:59:13"
                },
                {
                  "assignments": [
                    8876
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8876,
                      "name": "r1",
                      "nodeType": "VariableDeclaration",
                      "scope": 8952,
                      "src": "16243:7:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8875,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16243:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8885,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8878,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8791,
                        "src": "16264:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8879,
                        "name": "param1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8859,
                        "src": "16277:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8880,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8793,
                        "src": "16285:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8881,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8795,
                        "src": "16291:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8882,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8797,
                        "src": "16299:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8883,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8800,
                        "src": "16306:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8877,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8787,
                      "src": "16253:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16253:58:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16243:68:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8887,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8789,
                            "src": "16329:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8888,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7894,
                          "src": "16329:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 8886,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16326:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16326:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8890,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16343:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NOT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16343:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16326:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8897,
                  "nodeType": "IfStatement",
                  "src": "16322:64:13",
                  "trueBody": {
                    "id": 8896,
                    "nodeType": "Block",
                    "src": "16351:35:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "16372:3:13",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 8893,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8876,
                            "src": "16373:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8804,
                        "id": 8895,
                        "nodeType": "Return",
                        "src": "16365:10:13"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8898,
                      "name": "r1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8876,
                      "src": "16400:2:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 8905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8900,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8789,
                              "src": "16409:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 8901,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7894,
                            "src": "16409:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 8899,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "16406:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16406:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8903,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "16423:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "OR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16423:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16406:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16400:28:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8910,
                  "nodeType": "IfStatement",
                  "src": "16396:70:13",
                  "trueBody": {
                    "id": 8909,
                    "nodeType": "Block",
                    "src": "16430:36:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16451:4:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8804,
                        "id": 8908,
                        "nodeType": "Return",
                        "src": "16444:11:13"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8912,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "16480:3:13",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8911,
                        "name": "r1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8876,
                        "src": "16481:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 8919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8914,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8789,
                              "src": "16490:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 8915,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7894,
                            "src": "16490:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 8913,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "16487:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16487:13:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8917,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7890,
                          "src": "16504:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 8918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "AND",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16504:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$7890",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16487:23:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16480:30:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8924,
                  "nodeType": "IfStatement",
                  "src": "16476:73:13",
                  "trueBody": {
                    "id": 8923,
                    "nodeType": "Block",
                    "src": "16512:37:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 8921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16533:5:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 8804,
                        "id": 8922,
                        "nodeType": "Return",
                        "src": "16526:12:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8926
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8926,
                      "name": "r2",
                      "nodeType": "VariableDeclaration",
                      "scope": 8952,
                      "src": "16559:7:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8925,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16559:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8935,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8928,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8791,
                        "src": "16580:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8929,
                        "name": "param2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8862,
                        "src": "16593:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8930,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8793,
                        "src": "16601:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8931,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8795,
                        "src": "16607:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8932,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8797,
                        "src": "16615:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8933,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8800,
                        "src": "16622:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "id": 8927,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8787,
                      "src": "16569:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)"
                      }
                    },
                    "id": 8934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16569:58:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16559:68:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8937,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8789,
                            "src": "16645:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 8938,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7894,
                          "src": "16645:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 8936,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16642:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8939,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16642:13:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8940,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16659:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XOR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16659:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16642:23:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8948,
                  "nodeType": "IfStatement",
                  "src": "16638:69:13",
                  "trueBody": {
                    "id": 8947,
                    "nodeType": "Block",
                    "src": "16667:40:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 8945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8943,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8876,
                            "src": "16688:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 8944,
                            "name": "r2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8926,
                            "src": "16694:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "16688:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8804,
                        "id": 8946,
                        "nodeType": "Return",
                        "src": "16681:15:13"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8949,
                    "name": "r2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8926,
                    "src": "16724:2:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8804,
                  "id": 8950,
                  "nodeType": "Return",
                  "src": "16717:9:13"
                }
              ]
            },
            "documentation": null,
            "id": 8952,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalLogic",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8789,
                  "name": "_param",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15504:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$7897_memory_ptr",
                    "typeString": "struct ACL.Param"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8788,
                    "name": "Param",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7897,
                    "src": "15504:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$7897_storage_ptr",
                      "typeString": "struct ACL.Param"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8791,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15518:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8790,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15518:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8793,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15539:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15539:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8795,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15553:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8794,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15553:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8797,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15569:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8796,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15569:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8800,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15584:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8798,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15584:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8799,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15584:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15503:96:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8803,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8952,
                  "src": "15647:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8802,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15647:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15646:6:13"
            },
            "scope": 9152,
            "src": "15484:1304:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9019,
              "nodeType": "Block",
              "src": "16872:647:13",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8963,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "16886:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8964,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16893:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8965,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "EQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16893:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16886:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8971,
                  "nodeType": "IfStatement",
                  "src": "16882:34:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8967,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "16908:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8968,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "16914:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "16908:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 8970,
                    "nodeType": "Return",
                    "src": "16901:15:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8972,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "16989:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8973,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "16996:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NEQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16996:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16989:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8980,
                  "nodeType": "IfStatement",
                  "src": "16985:34:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8976,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17011:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8977,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17017:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17011:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 8979,
                    "nodeType": "Return",
                    "src": "17004:15:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8981,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "17092:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8982,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "17099:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17099:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17092:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8989,
                  "nodeType": "IfStatement",
                  "src": "17088:33:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8985,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17114:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8986,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17119:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17114:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 8988,
                    "nodeType": "Return",
                    "src": "17107:14:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 8993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8990,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "17195:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8991,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "17202:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 8992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17202:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17195:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8998,
                  "nodeType": "IfStatement",
                  "src": "17191:33:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8994,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17217:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8995,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17222:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17217:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 8997,
                    "nodeType": "Return",
                    "src": "17210:14:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 9002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8999,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "17298:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9000,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "17305:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 9001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17305:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17298:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9007,
                  "nodeType": "IfStatement",
                  "src": "17294:34:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 9003,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17320:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 9004,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17326:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17320:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 9006,
                    "nodeType": "Return",
                    "src": "17313:15:13"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 9011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9008,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8956,
                      "src": "17401:3:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9009,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7890,
                        "src": "17408:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$7890_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 9010,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17408:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$7890",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17401:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9016,
                  "nodeType": "IfStatement",
                  "src": "17397:34:13",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9014,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 9012,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "17423:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 9013,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8958,
                        "src": "17429:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17423:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 8962,
                    "id": 9015,
                    "nodeType": "Return",
                    "src": "17416:15:13"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 9017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17507:5:13",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 8962,
                  "id": 9018,
                  "nodeType": "Return",
                  "src": "17500:12:13"
                }
              ]
            },
            "documentation": null,
            "id": 9020,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8954,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 9020,
                  "src": "16811:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16811:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8956,
                  "name": "_op",
                  "nodeType": "VariableDeclaration",
                  "scope": 9020,
                  "src": "16823:6:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Op_$7890",
                    "typeString": "enum ACL.Op"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8955,
                    "name": "Op",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7890,
                    "src": "16823:2:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Op_$7890",
                      "typeString": "enum ACL.Op"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8958,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 9020,
                  "src": "16831:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8957,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16831:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16810:32:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 8962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8961,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9020,
                  "src": "16866:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8960,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16866:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16865:6:13"
            },
            "scope": 9152,
            "src": "16794:725:13",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9084,
              "nodeType": "Block",
              "src": "17660:1057:13",
              "statements": [
                {
                  "assignments": [
                    9037
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9037,
                      "name": "sig",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "17670:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 9036,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "17670:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9041,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9038,
                        "name": "_oracleAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9022,
                        "src": "17683:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACLOracle_$9690",
                          "typeString": "contract IACLOracle"
                        }
                      },
                      "id": 9039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "canPerform",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9689,
                      "src": "17683:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,address,bytes32,uint256[] memory) view external returns (bool)"
                      }
                    },
                    "id": 9040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "17683:31:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17670:44:13"
                },
                {
                  "assignments": [
                    9043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9043,
                      "name": "checkCalldata",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "17825:26:13",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 9042,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "17825:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9052,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9046,
                        "name": "sig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9037,
                        "src": "17877:3:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9047,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9024,
                        "src": "17882:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9048,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9026,
                        "src": "17888:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9049,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9028,
                        "src": "17896:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9050,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9031,
                        "src": "17903:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9044,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15140,
                        "src": "17854:3:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 9045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17854:22:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes4) pure returns (bytes memory)"
                      }
                    },
                    "id": 9051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17854:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17825:83:13"
                },
                {
                  "assignments": [
                    9054
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9054,
                      "name": "oracleCheckGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "17918:22:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9053,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17918:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9056,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 9055,
                    "name": "ORACLE_CHECK_GAS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7934,
                    "src": "17943:16:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17918:41:13"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9058,
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "17970:7:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 9057,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "17970:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9059,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17970:7:13"
                },
                {
                  "externalReferences": [
                    {
                      "checkCalldata": {
                        "declaration": 9043,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18060:13:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "checkCalldata": {
                        "declaration": 9043,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18088:13:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "ok": {
                        "declaration": 9058,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18010:2:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "oracleCheckGas": {
                        "declaration": 9054,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18027:14:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "_oracleAddr": {
                        "declaration": 9022,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18043:11:13",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 9060,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ok := staticcall(oracleCheckGas, _oracleAddr, add(checkCalldata, 0x20), mload(checkCalldata), 0, 0)\n}",
                  "src": "17987:144:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 9062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18133:3:13",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 9061,
                      "name": "ok",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "18134:2:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9066,
                  "nodeType": "IfStatement",
                  "src": "18129:46:13",
                  "trueBody": {
                    "id": 9065,
                    "nodeType": "Block",
                    "src": "18138:37:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 9063,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18159:5:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 9035,
                        "id": 9064,
                        "nodeType": "Return",
                        "src": "18152:12:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9068,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "18185:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9067,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18185:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9069,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18185:12:13"
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 9068,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18218:4:13",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 9070,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    size := returndatasize()\n}",
                  "src": "18207:46:13"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9071,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9068,
                      "src": "18255:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 9072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18263:2:13",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "18255:10:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9077,
                  "nodeType": "IfStatement",
                  "src": "18251:53:13",
                  "trueBody": {
                    "id": 9076,
                    "nodeType": "Block",
                    "src": "18267:37:13",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 9074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18288:5:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 9035,
                        "id": 9075,
                        "nodeType": "Return",
                        "src": "18281:12:13"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9079,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 9085,
                      "src": "18314:11:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 9078,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18314:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9080,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18314:11:13"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 9079,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18507:6:13",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 9068,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18450:4:13",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 9081,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    returndatacopy(ptr, 0, size)\n    result := mload(ptr)\n    mstore(ptr, 0)\n}",
                  "src": "18335:368:13"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9082,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9079,
                    "src": "18704:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9035,
                  "id": 9083,
                  "nodeType": "Return",
                  "src": "18697:13:13"
                }
              ]
            },
            "documentation": null,
            "id": 9085,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9022,
                  "name": "_oracleAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17546:22:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IACLOracle_$9690",
                    "typeString": "contract IACLOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9021,
                    "name": "IACLOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9690,
                    "src": "17546:10:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IACLOracle_$9690",
                      "typeString": "contract IACLOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9024,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17570:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9023,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17570:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9026,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17584:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9025,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17584:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9028,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17600:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9027,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "17600:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9031,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17615:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 9029,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17615:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9030,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "17615:9:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17545:85:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 9035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9034,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9085,
                  "src": "17654:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9033,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17654:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17653:6:13"
            },
            "scope": 9152,
            "src": "17525:1192:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9109,
              "nodeType": "Block",
              "src": "18878:135:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9094,
                        "name": "permissionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7956,
                        "src": "18888:17:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 9099,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9096,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9089,
                            "src": "18915:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 9097,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9091,
                            "src": "18921:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 9095,
                          "name": "roleHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9129,
                          "src": "18906:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 9098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18906:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "18888:40:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9100,
                      "name": "_newManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "18931:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18888:54:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 9102,
                  "nodeType": "ExpressionStatement",
                  "src": "18888:54:13"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9104,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9089,
                        "src": "18981:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9105,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9091,
                        "src": "18987:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9106,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9087,
                        "src": "18994:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9103,
                      "name": "ChangePermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7984,
                      "src": "18957:23:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,bytes32,address)"
                      }
                    },
                    "id": 9107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18957:49:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9108,
                  "nodeType": "EmitStatement",
                  "src": "18952:54:13"
                }
              ]
            },
            "documentation": "@dev Internal function that sets management",
            "id": 9110,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9087,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 9110,
                  "src": "18819:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9086,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18819:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9089,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 9110,
                  "src": "18840:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9088,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18840:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9091,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 9110,
                  "src": "18854:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9090,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18854:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18818:50:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 9093,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18878:0:13"
            },
            "scope": 9152,
            "src": "18788:225:13",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9128,
              "nodeType": "Block",
              "src": "19100:74:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "524f4c45",
                            "id": 9122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19144:6:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            "value": "ROLE"
                          },
                          {
                            "argumentTypes": null,
                            "id": 9123,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9112,
                            "src": "19152:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 9124,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9114,
                            "src": "19160:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9120,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "19127:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 9121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19127:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 9125,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19127:39:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 9119,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "19117:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 9126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19117:50:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 9118,
                  "id": 9127,
                  "nodeType": "Return",
                  "src": "19110:57:13"
                }
              ]
            },
            "documentation": null,
            "id": 9129,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "roleHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9112,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 9129,
                  "src": "19037:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9111,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19037:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9114,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 9129,
                  "src": "19053:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9113,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19053:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19036:31:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 9118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9129,
                  "src": "19091:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9116,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19091:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19090:9:13"
            },
            "scope": 9152,
            "src": "19019:155:13",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9150,
              "nodeType": "Block",
              "src": "19281:86:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "5045524d495353494f4e",
                            "id": 9143,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19325:12:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            "value": "PERMISSION"
                          },
                          {
                            "argumentTypes": null,
                            "id": 9144,
                            "name": "_who",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9131,
                            "src": "19339:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 9145,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9133,
                            "src": "19345:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 9146,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9135,
                            "src": "19353:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9141,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "19308:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 9142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19308:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 9147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19308:51:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 9140,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "19298:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 9148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19298:62:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 9139,
                  "id": 9149,
                  "nodeType": "Return",
                  "src": "19291:69:13"
                }
              ]
            },
            "documentation": null,
            "id": 9151,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "permissionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9131,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 9151,
                  "src": "19204:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19204:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9133,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 9151,
                  "src": "19218:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19218:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9135,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 9151,
                  "src": "19234:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9134,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19234:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19203:45:13"
            },
            "payable": false,
            "returnParameters": {
              "id": 9139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9138,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9151,
                  "src": "19272:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9137,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19272:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19271:9:13"
            },
            "scope": 9152,
            "src": "19180:187:13",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 9153,
        "src": "293:19076:13"
      }
    ],
    "src": "0:19370:13"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2019-09-04T11:02:55.678Z"
}