{
  "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"
    },
    {
      "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": "0x60806040526200001d62000023640100000000026401000000009004565b62000309565b60006200003e6200015e640100000000026401000000009004565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000e5578082015181840152602081019050620000c8565b50505050905090810190601f168015620001135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200015c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620001ab640100000000026401000000009004565b565b6000620001a67febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e60010260001916620002f764010000000002620033a2176401000000009004565b905090565b6000620001c66200015e640100000000026401000000009004565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515620002a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200026d57808201518184015260208101905062000250565b50505050905090810190601f1680156200029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50620002f4817febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e60010260001916620003026401000000000262003b8f179091906401000000009004565b50565b600081549050919050565b8082555050565b613c2f80620003196000396000f300608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630803fac01461019b5780630808343e146101ca57806309699ff51461021b5780630a8ed3db1461026c57806315949ed7146102dd5780631b5e75be146103625780631d63ff2b1461043c5780632914b9bd1461046f57806332f0a3b5146105185780633d6ab68f1461056f5780636815c992146105a25780636d6712d8146106565780637e7db6e1146106df57806380afdea81461073a5780638b3dd7491461076d5780639d0effdb146107985780639d4941d814610809578063a03c58321461084c578063a1658fad14610935578063a479e508146109e1578063a5ed8bf814610a38578063a885508a14610a8f578063afd925df14610ae0578063b190572714610b51578063be03847814610be2578063c4d66de814610c73578063c513f66e14610cb6578063d4aae0c414610ce9578063de4796ed14610d40578063f516bc0e14610d6f578063f520b58d14610dc6578063fdef910614610e92575b600080fd5b3480156101a757600080fd5b506101b0610f61565b604051808215151515815260200191505060405180910390f35b3480156101d657600080fd5b50610219600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610f8c565b005b34801561022757600080fd5b5061026a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506111f7565b005b34801561027857600080fd5b506102db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611322565b005b3480156102e957600080fd5b5061034c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611363565b6040518082815260200191505060405180910390f35b34801561036e57600080fd5b506104226004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506113b1565b604051808215151515815260200191505060405180910390f35b34801561044857600080fd5b5061045161140a565b60405180826000191660001916815260200191505060405180910390f35b34801561047b57600080fd5b506104d6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611412565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052457600080fd5b5061052d611531565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561057b57600080fd5b506105846115de565b60405180826000191660001916815260200191505060405180910390f35b3480156105ae57600080fd5b50610654600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611605565b005b34801561066257600080fd5b506106c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611773565b604051808215151515815260200191505060405180910390f35b3480156106eb57600080fd5b50610720600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117c0565b604051808215151515815260200191505060405180910390f35b34801561074657600080fd5b5061074f6117cb565b60405180826000191660001916815260200191505060405180910390f35b34801561077957600080fd5b50610782611802565b6040518082815260200191505060405180910390f35b3480156107a457600080fd5b50610807600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611839565b005b34801561081557600080fd5b5061084a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611969565b005b34801561085857600080fd5b506108c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050611d9b565b604051808460ff1660ff1681526020018360ff1660ff168152602001827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b34801561094157600080fd5b506109c7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611e5d565b604051808215151515815260200191505060405180910390f35b3480156109ed57600080fd5b506109f6612064565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a4457600080fd5b50610a4d61217f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9b57600080fd5b50610ade600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506121a3565b005b348015610aec57600080fd5b50610b4f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506122ce565b005b348015610b5d57600080fd5b50610ba0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506123f9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bee57600080fd5b50610c71600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612448565b005b348015610c7f57600080fd5b50610cb4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126b5565b005b348015610cc257600080fd5b50610ccb6128ee565b60405180826000191660001916815260200191505060405180910390f35b348015610cf557600080fd5b50610cfe612915565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d4c57600080fd5b50610d5561294c565b604051808215151515815260200191505060405180910390f35b348015610d7b57600080fd5b50610d8461297d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dd257600080fd5b50610e78600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612982565b604051808215151515815260200191505060405180910390f35b348015610e9e57600080fd5b50610f47600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612a8a565b604051808215151515815260200191505060405180910390f35b600080610f6c611802565b905060008114158015610f86575080610f83612abe565b10155b91505090565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a600102610feb33826000604051908082528060200260200182016040528015610fe55781602001602082028038833980820191505090505b50611e5d565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561108e578082015181840152602081019050611073565b50505050905090810190601f1680156110bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508282600073ffffffffffffffffffffffffffffffffffffffff166110ee83836123f9565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e414745520000000000000000000000008152509015156111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111a857808201518184015260208101905061118d565b50505050905090810190601f1680156111d55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506111f060018686612ac6565b5050505050565b818161120382826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000081525090151561130f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112d45780820151818401526020810190506112b9565b50505050905090810190601f1680156113015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061131c60018585612ac6565b50505050565b61135e83838360006040519080825280602002602001820160405280156113585781602001602082028038833980820191505090505b50611605565b505050565b600060016000806000611377888888612b8d565b6000191660001916815260200190815260200160002054600019166000191681526020019081526020016000208054905090509392505050565b60007f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010260001916866000191614156113ef5760019050611401565b6113fe86600087878787612cd0565b90505b95945050505050565b600060010281565b600061141c612064565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114a3578082015181840152602081019050611488565b50505050905090810190601f1680156114d05780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b505050506040513d602081101561151957600080fd5b81019080805190602001909291905050509050919050565b600061153b612915565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561159e57600080fd5b505af11580156115b2573d6000803e3d6000fd5b505050506040513d60208110156115c857600080fd5b8101908080519060200190929190505050905090565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a60010281565b6000838361161382826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000081525090151561171f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116e45780820151818401526020810190506116c9565b50505050905090810190601f1680156117115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000845111611752577f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010261175c565b61175b84612fe1565b5b925061176a8787878661322c565b50505050505050565b6000606060006040519080825280602002602001820160405280156117a75781602001602082028038833980820191505090505b5090506117b685858584612982565b9150509392505050565b600060019050919050565b60006117fd7fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b60010260001916613397565b905090565b60006118347febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166133a2565b905090565b818161184582826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e4147455200000000000000000000000000815250901515611951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119165780820151818401526020810190506118fb565b50505050905090810190601f1680156119435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611962858585600060010261322c565b5050505050565b600080611975836117c0565b6040805190810160405280601281526020017f5245434f5645525f444953414c4c4f5745440000000000000000000000000000815250901515611a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a185780820151818401526020810190506119fd565b50505050905090810190601f168015611a455780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611a5c611531565b9150611a67826133ad565b6040805190810160405280601a81526020017f5245434f5645525f5641554c545f4e4f545f434f4e5452414354000000000000815250901515611b45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b0a578082015181840152602081019050611aef565b50505050905090810190601f168015611b375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bde578173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611bd8573d6000803e3d6000fd5b50611d96565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c7957600080fd5b505af1158015611c8d573d6000803e3d6000fd5b505050506040513d6020811015611ca357600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b505050506040513d6020811015611d8357600080fd5b8101908080519060200190929190505050505b505050565b60008060008060016000806000611db38c8c8c612b8d565b60001916600019168152602001908152602001600020546000191660001916815260200190815260200160002085815481101515611ded57fe5b9060005260206000200190508060000160009054906101000a900460ff168160000160019054906101000a900460ff168260000160029054906101000a90047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935093509350509450945094915050565b60008060606000611e6c610f61565b1515611e7b576000935061205a565b611e83612915565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ec3576000935061205a565b602085510290508491508082528273ffffffffffffffffffffffffffffffffffffffff1663fdef9106883089866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611fcd578082015181840152602081019050611fb2565b50505050905090810190601f168015611ffa5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561201c57600080fd5b505af1158015612030573d6000803e3d6000fd5b505050506040513d602081101561204657600080fd5b810190808051906020019092919050505093505b5050509392505050565b60008061206f612915565b73ffffffffffffffffffffffffffffffffffffffff1663be00bbd87fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb6001027fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360001916600019168152602001826000191660001916815260200192505050602060405180830381600087803b15801561213b57600080fd5b505af115801561214f573d6000803e3d6000fd5b505050506040513d602081101561216557600080fd5b810190808051906020019092919050505090508091505090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b81816121af82826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e41474552000000000000000000000000008152509015156122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612280578082015181840152602081019050612265565b50505050905090810190601f1680156122ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506122c860008585612ac6565b50505050565b81816122da82826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e41474552000000000000000000000000008152509015156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123ab578082015181840152602081019050612390565b50505050905090810190601f1680156123d85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506123f2858585612ac6565b5050505050565b60006002600061240985856133ff565b6000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a6001026124a7338260006040519080825280602002602001820160405280156124a15781602001602082028038833980820191505090505b50611e5d565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561254a57808201518184015260208101905061252f565b50505050905090810190601f1680156125775780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508383600073ffffffffffffffffffffffffffffffffffffffff166125aa83836123f9565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e4147455200000000000000000000000081525090151561269f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612664578082015181840152602081019050612649565b50505050905090810190601f1680156126915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506126ac878787876134fe565b50505050505050565b60006126bf611802565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151561279e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612763578082015181840152602081019050612748565b50505050905090810190601f1680156127905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506127a761353e565b6127af612915565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f415554485f494e49545f4b45524e454c0000000000000000000000008152509015156128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612880578082015181840152602081019050612865565b50505050905090810190601f1680156128ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506128eb81307f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a600102846134fe565b50565b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010281565b60006129477f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b6001026000191661366b565b905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612977611802565b14905090565b600181565b6000806000806000612995898989612b8d565b600019166000191681526020019081526020016000205491506000600102600019168260001916141580156129d357506129d282888888886113b1565b5b156129e15760019250612a80565b600080612a0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8989612b8d565b60001916600019168152602001908152602001600020549050600060010260001916816000191614158015612a6d5750612a6c817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8888886113b1565b5b15612a7b5760019250612a80565b600092505b5050949350505050565b60006060600060208451811515612a9d57fe5b049050839150808252612ab287878785612982565b92505050949350505050565b600043905090565b8260026000612ad585856133ff565b6000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff1681600019168373ffffffffffffffffffffffffffffffffffffffff167ff3addc8b8e25ee11528a61b0e65092cae0666ef0ec0c64cb303993c88d689b4d60405160405180910390a4505050565b600083838360405160200180807f5045524d495353494f4e00000000000000000000000000000000000000000000815250600a018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083101515612c9a5780518252602082019150602081019050602083039250612c75565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090509392505050565b6000612cda613bbb565b600080600160008b60001916600019168152602001908152602001600020805490508963ffffffff16101515612d135760009350612fd4565b600160008b600019166000191681526020019081526020016000208963ffffffff16815481101515612d4157fe5b90600052602060002001606060405190810160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a90047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050925060cc60ff16836000015160ff161415612e2f57612e28838b8a8a8a8a613676565b9350612fd4565b82604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905060cb60ff16836000015160ff161415612e9657612e7a83604001518989898961388b565b612e85576000612e88565b60015b60ff16915060019050612f78565b60c860ff16836000015160ff161415612eb857612eb1612abe565b9150612f77565b60c960ff16836000015160ff161415612eda57612ed3613a5c565b9150612f76565b60cd60ff16836000015160ff161415612f195782604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169150612f75565b8451836000015160ff16101515612f335760009350612fd4565b84836000015160ff16815181101515612f4857fe5b906020019060200201517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1691505b5b5b5b6007600c811115612f8557fe5b836020015160ff16600c811115612f9857fe5b600c811115612fa357fe5b1415612fb457600082119350612fd4565b612fd182846020015160ff16600c811115612fcb57fe5b83613a64565b93505b5050509695505050505050565b6000806000806000612ff1613bbb565b8660405160200180828051906020019060200280838360005b8381101561302557808201518184015260208101905061300a565b505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515613073578051825260208201915060208101905060208303925061304e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450600160008660001916600019168152602001908152602001600020935060008480549050141561321f57600092505b865183101561321e5786838151811015156130e857fe5b90602001906020020151915060606040519081016040528061310984613b6b565b60ff16815260200161311a84613b7d565b60ff168152602001837dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509050838190806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a8154817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505082806001019350506130d1565b5b8495505050505050919050565b6000808260008061323e898989612b8d565b6000191660001916815260200190815260200160002081600019169055506000600102600019168360001916141591508180156132a657507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010260001916836000191614155b905083600019168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f759b9a74d5354b5801710a0c1b283cc9f0d32b607ac8ced10c83ac8e75c77d5285604051808215151515815260200191505060405180910390a4801561338f5783600019168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8dfee25d92d73b8c9b868f9fa3e215cc1981033f426e53803e3da4f09a2cfc308660405180826000191660001916815260200191505060405180910390a45b505050505050565b600081549050919050565b600081549050919050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ee57600091506133f9565b823b90506000811191505b50919050565b6000828260405160200180807f524f4c45000000000000000000000000000000000000000000000000000000008152506004018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156134c957805182526020820191506020810190506020830392506134a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b61352d8484847f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010261322c565b613538818484612ac6565b50505050565b6000613548611802565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515613627576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135ec5780820151818401526020810190506135d1565b50505050905090810190601f1680156136195780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613669613633612abe565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e60010260001916613b8f90919063ffffffff16565b565b600081549050919050565b6000806000806000806000806000600c8081111561369057fe5b8f6020015160ff16600c8111156136a357fe5b600c8111156136ae57fe5b141561371e576136e18f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613b96565b809850819950829a505050506136fb8e898f8f8f8f612cd0565b94506137178e8661370c578761370e565b885b8f8f8f8f612cd0565b9850613879565b61374b8f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613b96565b5080945081955050506137628e858f8f8f8f612cd0565b91506008600c81111561377157fe5b8f6020015160ff16600c81111561378457fe5b600c81111561378f57fe5b141561379e5781159850613879565b8180156137d35750600a600c8111156137b357fe5b8f6020015160ff16600c8111156137c657fe5b600c8111156137d157fe5b145b156137e15760019850613879565b8115801561381757506009600c8111156137f757fe5b8f6020015160ff16600c81111561380a57fe5b600c81111561381557fe5b145b156138255760009850613879565b6138338e848f8f8f8f612cd0565b9050600b600c81111561384257fe5b8f6020015160ff16600c81111561385557fe5b600c81111561386057fe5b14156138755780151582151514159850613879565b8098505b50505050505050509695505050505050565b60008060606000806000808b73ffffffffffffffffffffffffffffffffffffffff16632a15109090507c0100000000000000000000000000000000000000000000000000000000029550858b8b8b8b604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015613992578082015181840152602081019050613977565b5050505090500195505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050945061753093506000808651602088018f88fa9250821515613a225760009650613a4d565b3d9150602082141515613a385760009650613a4d565b604051826000823e8051915060008152508096505b50505050505095945050505050565b600042905090565b60006001600c811115613a7357fe5b83600c811115613a7f57fe5b1415613a8f578184149050613b64565b6002600c811115613a9c57fe5b83600c811115613aa857fe5b1415613ab957818414159050613b64565b6003600c811115613ac657fe5b83600c811115613ad257fe5b1415613ae2578184119050613b64565b6004600c811115613aef57fe5b83600c811115613afb57fe5b1415613b0b578184109050613b64565b6005600c811115613b1857fe5b83600c811115613b2457fe5b1415613b3557818410159050613b64565b6006600c811115613b4257fe5b83600c811115613b4e57fe5b1415613b5f57818411159050613b64565b600090505b9392505050565b600060f8829060020a90049050919050565b600060f0829060020a90049050919050565b8082555050565b60008060008392506020849060020a900491506040849060020a900490509193909250565b606060405190810160405280600060ff168152602001600060ff16815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250905600a165627a7a72305820a51c866ca5f7968a007093fb065d1e87d14f79b23471b34b5cecd7bec50477d50029",
  "deployedBytecode": "0x608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630803fac01461019b5780630808343e146101ca57806309699ff51461021b5780630a8ed3db1461026c57806315949ed7146102dd5780631b5e75be146103625780631d63ff2b1461043c5780632914b9bd1461046f57806332f0a3b5146105185780633d6ab68f1461056f5780636815c992146105a25780636d6712d8146106565780637e7db6e1146106df57806380afdea81461073a5780638b3dd7491461076d5780639d0effdb146107985780639d4941d814610809578063a03c58321461084c578063a1658fad14610935578063a479e508146109e1578063a5ed8bf814610a38578063a885508a14610a8f578063afd925df14610ae0578063b190572714610b51578063be03847814610be2578063c4d66de814610c73578063c513f66e14610cb6578063d4aae0c414610ce9578063de4796ed14610d40578063f516bc0e14610d6f578063f520b58d14610dc6578063fdef910614610e92575b600080fd5b3480156101a757600080fd5b506101b0610f61565b604051808215151515815260200191505060405180910390f35b3480156101d657600080fd5b50610219600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050610f8c565b005b34801561022757600080fd5b5061026a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506111f7565b005b34801561027857600080fd5b506102db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611322565b005b3480156102e957600080fd5b5061034c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611363565b6040518082815260200191505060405180910390f35b34801561036e57600080fd5b506104226004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506113b1565b604051808215151515815260200191505060405180910390f35b34801561044857600080fd5b5061045161140a565b60405180826000191660001916815260200191505060405180910390f35b34801561047b57600080fd5b506104d6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611412565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052457600080fd5b5061052d611531565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561057b57600080fd5b506105846115de565b60405180826000191660001916815260200191505060405180910390f35b3480156105ae57600080fd5b50610654600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611605565b005b34801561066257600080fd5b506106c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611773565b604051808215151515815260200191505060405180910390f35b3480156106eb57600080fd5b50610720600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117c0565b604051808215151515815260200191505060405180910390f35b34801561074657600080fd5b5061074f6117cb565b60405180826000191660001916815260200191505060405180910390f35b34801561077957600080fd5b50610782611802565b6040518082815260200191505060405180910390f35b3480156107a457600080fd5b50610807600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611839565b005b34801561081557600080fd5b5061084a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611969565b005b34801561085857600080fd5b506108c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050611d9b565b604051808460ff1660ff1681526020018360ff1660ff168152602001827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b34801561094157600080fd5b506109c7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611e5d565b604051808215151515815260200191505060405180910390f35b3480156109ed57600080fd5b506109f6612064565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a4457600080fd5b50610a4d61217f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9b57600080fd5b50610ade600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506121a3565b005b348015610aec57600080fd5b50610b4f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506122ce565b005b348015610b5d57600080fd5b50610ba0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506123f9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bee57600080fd5b50610c71600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612448565b005b348015610c7f57600080fd5b50610cb4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126b5565b005b348015610cc257600080fd5b50610ccb6128ee565b60405180826000191660001916815260200191505060405180910390f35b348015610cf557600080fd5b50610cfe612915565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d4c57600080fd5b50610d5561294c565b604051808215151515815260200191505060405180910390f35b348015610d7b57600080fd5b50610d8461297d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dd257600080fd5b50610e78600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612982565b604051808215151515815260200191505060405180910390f35b348015610e9e57600080fd5b50610f47600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612a8a565b604051808215151515815260200191505060405180910390f35b600080610f6c611802565b905060008114158015610f86575080610f83612abe565b10155b91505090565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a600102610feb33826000604051908082528060200260200182016040528015610fe55781602001602082028038833980820191505090505b50611e5d565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561108e578082015181840152602081019050611073565b50505050905090810190601f1680156110bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508282600073ffffffffffffffffffffffffffffffffffffffff166110ee83836123f9565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e414745520000000000000000000000008152509015156111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111a857808201518184015260208101905061118d565b50505050905090810190601f1680156111d55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506111f060018686612ac6565b5050505050565b818161120382826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000081525090151561130f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112d45780820151818401526020810190506112b9565b50505050905090810190601f1680156113015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061131c60018585612ac6565b50505050565b61135e83838360006040519080825280602002602001820160405280156113585781602001602082028038833980820191505090505b50611605565b505050565b600060016000806000611377888888612b8d565b6000191660001916815260200190815260200160002054600019166000191681526020019081526020016000208054905090509392505050565b60007f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010260001916866000191614156113ef5760019050611401565b6113fe86600087878787612cd0565b90505b95945050505050565b600060010281565b600061141c612064565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114a3578082015181840152602081019050611488565b50505050905090810190601f1680156114d05780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b505050506040513d602081101561151957600080fd5b81019080805190602001909291905050509050919050565b600061153b612915565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561159e57600080fd5b505af11580156115b2573d6000803e3d6000fd5b505050506040513d60208110156115c857600080fd5b8101908080519060200190929190505050905090565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a60010281565b6000838361161382826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e414745520000000000000000000000000081525090151561171f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116e45780820151818401526020810190506116c9565b50505050905090810190601f1680156117115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000845111611752577f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010261175c565b61175b84612fe1565b5b925061176a8787878661322c565b50505050505050565b6000606060006040519080825280602002602001820160405280156117a75781602001602082028038833980820191505090505b5090506117b685858584612982565b9150509392505050565b600060019050919050565b60006117fd7fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b60010260001916613397565b905090565b60006118347febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166133a2565b905090565b818161184582826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e4147455200000000000000000000000000815250901515611951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119165780820151818401526020810190506118fb565b50505050905090810190601f1680156119435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611962858585600060010261322c565b5050505050565b600080611975836117c0565b6040805190810160405280601281526020017f5245434f5645525f444953414c4c4f5745440000000000000000000000000000815250901515611a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a185780820151818401526020810190506119fd565b50505050905090810190601f168015611a455780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611a5c611531565b9150611a67826133ad565b6040805190810160405280601a81526020017f5245434f5645525f5641554c545f4e4f545f434f4e5452414354000000000000815250901515611b45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b0a578082015181840152602081019050611aef565b50505050905090810190601f168015611b375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bde578173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611bd8573d6000803e3d6000fd5b50611d96565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c7957600080fd5b505af1158015611c8d573d6000803e3d6000fd5b505050506040513d6020811015611ca357600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b505050506040513d6020811015611d8357600080fd5b8101908080519060200190929190505050505b505050565b60008060008060016000806000611db38c8c8c612b8d565b60001916600019168152602001908152602001600020546000191660001916815260200190815260200160002085815481101515611ded57fe5b9060005260206000200190508060000160009054906101000a900460ff168160000160019054906101000a900460ff168260000160029054906101000a90047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935093509350509450945094915050565b60008060606000611e6c610f61565b1515611e7b576000935061205a565b611e83612915565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ec3576000935061205a565b602085510290508491508082528273ffffffffffffffffffffffffffffffffffffffff1663fdef9106883089866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611fcd578082015181840152602081019050611fb2565b50505050905090810190601f168015611ffa5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561201c57600080fd5b505af1158015612030573d6000803e3d6000fd5b505050506040513d602081101561204657600080fd5b810190808051906020019092919050505093505b5050509392505050565b60008061206f612915565b73ffffffffffffffffffffffffffffffffffffffff1663be00bbd87fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb6001027fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360001916600019168152602001826000191660001916815260200192505050602060405180830381600087803b15801561213b57600080fd5b505af115801561214f573d6000803e3d6000fd5b505050506040513d602081101561216557600080fd5b810190808051906020019092919050505090508091505090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b81816121af82826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e41474552000000000000000000000000008152509015156122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612280578082015181840152602081019050612265565b50505050905090810190601f1680156122ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506122c860008585612ac6565b50505050565b81816122da82826123f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f41434c5f415554485f4e4f5f4d414e41474552000000000000000000000000008152509015156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123ab578082015181840152602081019050612390565b50505050905090810190601f1680156123d85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506123f2858585612ac6565b5050505050565b60006002600061240985856133ff565b6000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b7f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a6001026124a7338260006040519080825280602002602001820160405280156124a15781602001602082028038833980820191505090505b50611e5d565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561254a57808201518184015260208101905061252f565b50505050905090810190601f1680156125775780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508383600073ffffffffffffffffffffffffffffffffffffffff166125aa83836123f9565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f4558495354454e545f4d414e4147455200000000000000000000000081525090151561269f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612664578082015181840152602081019050612649565b50505050905090810190601f1680156126915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506126ac878787876134fe565b50505050505050565b60006126bf611802565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151561279e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612763578082015181840152602081019050612748565b50505050905090810190601f1680156127905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506127a761353e565b6127af612915565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601481526020017f41434c5f415554485f494e49545f4b45524e454c0000000000000000000000008152509015156128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612880578082015181840152602081019050612865565b50505050905090810190601f1680156128ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506128eb81307f0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a600102846134fe565b50565b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010281565b60006129477f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b6001026000191661366b565b905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612977611802565b14905090565b600181565b6000806000806000612995898989612b8d565b600019166000191681526020019081526020016000205491506000600102600019168260001916141580156129d357506129d282888888886113b1565b5b156129e15760019250612a80565b600080612a0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8989612b8d565b60001916600019168152602001908152602001600020549050600060010260001916816000191614158015612a6d5750612a6c817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8888886113b1565b5b15612a7b5760019250612a80565b600092505b5050949350505050565b60006060600060208451811515612a9d57fe5b049050839150808252612ab287878785612982565b92505050949350505050565b600043905090565b8260026000612ad585856133ff565b6000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff1681600019168373ffffffffffffffffffffffffffffffffffffffff167ff3addc8b8e25ee11528a61b0e65092cae0666ef0ec0c64cb303993c88d689b4d60405160405180910390a4505050565b600083838360405160200180807f5045524d495353494f4e00000000000000000000000000000000000000000000815250600a018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083101515612c9a5780518252602082019150602081019050602083039250612c75565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090509392505050565b6000612cda613bbb565b600080600160008b60001916600019168152602001908152602001600020805490508963ffffffff16101515612d135760009350612fd4565b600160008b600019166000191681526020019081526020016000208963ffffffff16815481101515612d4157fe5b90600052602060002001606060405190810160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a90047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050925060cc60ff16836000015160ff161415612e2f57612e28838b8a8a8a8a613676565b9350612fd4565b82604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905060cb60ff16836000015160ff161415612e9657612e7a83604001518989898961388b565b612e85576000612e88565b60015b60ff16915060019050612f78565b60c860ff16836000015160ff161415612eb857612eb1612abe565b9150612f77565b60c960ff16836000015160ff161415612eda57612ed3613a5c565b9150612f76565b60cd60ff16836000015160ff161415612f195782604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169150612f75565b8451836000015160ff16101515612f335760009350612fd4565b84836000015160ff16815181101515612f4857fe5b906020019060200201517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1691505b5b5b5b6007600c811115612f8557fe5b836020015160ff16600c811115612f9857fe5b600c811115612fa357fe5b1415612fb457600082119350612fd4565b612fd182846020015160ff16600c811115612fcb57fe5b83613a64565b93505b5050509695505050505050565b6000806000806000612ff1613bbb565b8660405160200180828051906020019060200280838360005b8381101561302557808201518184015260208101905061300a565b505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515613073578051825260208201915060208101905060208303925061304e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450600160008660001916600019168152602001908152602001600020935060008480549050141561321f57600092505b865183101561321e5786838151811015156130e857fe5b90602001906020020151915060606040519081016040528061310984613b6b565b60ff16815260200161311a84613b7d565b60ff168152602001837dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509050838190806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a8154817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505082806001019350506130d1565b5b8495505050505050919050565b6000808260008061323e898989612b8d565b6000191660001916815260200190815260200160002081600019169055506000600102600019168360001916141591508180156132a657507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010260001916836000191614155b905083600019168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f759b9a74d5354b5801710a0c1b283cc9f0d32b607ac8ced10c83ac8e75c77d5285604051808215151515815260200191505060405180910390a4801561338f5783600019168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8dfee25d92d73b8c9b868f9fa3e215cc1981033f426e53803e3da4f09a2cfc308660405180826000191660001916815260200191505060405180910390a45b505050505050565b600081549050919050565b600081549050919050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ee57600091506133f9565b823b90506000811191505b50919050565b6000828260405160200180807f524f4c45000000000000000000000000000000000000000000000000000000008152506004018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156134c957805182526020820191506020810190506020830392506134a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b61352d8484847f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360010261322c565b613538818484612ac6565b50505050565b6000613548611802565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515613627576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135ec5780820151818401526020810190506135d1565b50505050905090810190601f1680156136195780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613669613633612abe565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e60010260001916613b8f90919063ffffffff16565b565b600081549050919050565b6000806000806000806000806000600c8081111561369057fe5b8f6020015160ff16600c8111156136a357fe5b600c8111156136ae57fe5b141561371e576136e18f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613b96565b809850819950829a505050506136fb8e898f8f8f8f612cd0565b94506137178e8661370c578761370e565b885b8f8f8f8f612cd0565b9850613879565b61374b8f604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613b96565b5080945081955050506137628e858f8f8f8f612cd0565b91506008600c81111561377157fe5b8f6020015160ff16600c81111561378457fe5b600c81111561378f57fe5b141561379e5781159850613879565b8180156137d35750600a600c8111156137b357fe5b8f6020015160ff16600c8111156137c657fe5b600c8111156137d157fe5b145b156137e15760019850613879565b8115801561381757506009600c8111156137f757fe5b8f6020015160ff16600c81111561380a57fe5b600c81111561381557fe5b145b156138255760009850613879565b6138338e848f8f8f8f612cd0565b9050600b600c81111561384257fe5b8f6020015160ff16600c81111561385557fe5b600c81111561386057fe5b14156138755780151582151514159850613879565b8098505b50505050505050509695505050505050565b60008060606000806000808b73ffffffffffffffffffffffffffffffffffffffff16632a15109090507c0100000000000000000000000000000000000000000000000000000000029550858b8b8b8b604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015613992578082015181840152602081019050613977565b5050505090500195505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050945061753093506000808651602088018f88fa9250821515613a225760009650613a4d565b3d9150602082141515613a385760009650613a4d565b604051826000823e8051915060008152508096505b50505050505095945050505050565b600042905090565b60006001600c811115613a7357fe5b83600c811115613a7f57fe5b1415613a8f578184149050613b64565b6002600c811115613a9c57fe5b83600c811115613aa857fe5b1415613ab957818414159050613b64565b6003600c811115613ac657fe5b83600c811115613ad257fe5b1415613ae2578184119050613b64565b6004600c811115613aef57fe5b83600c811115613afb57fe5b1415613b0b578184109050613b64565b6005600c811115613b1857fe5b83600c811115613b2457fe5b1415613b3557818410159050613b64565b6006600c811115613b4257fe5b83600c811115613b4e57fe5b1415613b5f57818411159050613b64565b600090505b9392505050565b600060f8829060020a90049050919050565b600060f0829060020a90049050919050565b8082555050565b60008060008392506020849060020a900491506040849060020a900490509193909250565b606060405190810160405280600060ff168152602001600060ff16815260200160007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250905600a165627a7a72305820a51c866ca5f7968a007093fb065d1e87d14f79b23471b34b5cecd7bec50477d50029",
  "sourceMap": "251:19458:9:-;;;344:9:19;:7;;;:9;;;:::i;:::-;251:19458:9;;590:84:28;651:1:26;623:24;:22;;;:24;;;:::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;637:30:28;277:2;637:13;;;:30;;;:::i;:::-;590:84::o;889:137:26:-;944:7;970:49;353:66;970:29;;:47;;;;;;;;:49;;;:::i;:::-;963:56;;889:137;:::o;1759:141::-;651:1;623:24;:22;;;:24;;;:::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1832:61;1880:12;353:66;1832:29;;:47;;;;;;;;;:61;;;;;:::i;:::-;1759:141;:::o;519:134:31:-;587:12;636:8;630:15;622:23;;620:27;;;:::o;1028:119::-;1134:4;1124:8;1117:22;1115:26;;:::o;251:19458:9:-;;;;;;;",
  "deployedSourceMap": "251:19458:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1136:208:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1136:208:26;;;;;;;;;;;;;;;;;;;;;;;;;;;8470:225:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8470:225:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8972:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8972:188:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5568:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5568:165:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9468:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9468:208:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12493:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12493:339:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1556:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1556:50:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;733:179:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;733:179:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2466:229:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2466:229:18;;;;;;;;;;;;;;;;;;;;;;;;;;;452:116:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;452:116:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6294:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6294:309:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12276:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12276:211:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1333:99:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1333:99:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;796:106:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:106:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;889:137:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;889:137:26;;;;;;;;;;;;;;;;;;;;;;;7045:204:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7045:204:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;687:446:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;687:446:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;10022:325:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10022:325:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1524:826:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1524:826:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;918:231:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;918:231:34;;;;;;;;;;;;;;;;;;;;;;;;;;;1612:48:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1612:48:9;;;;;;;;;;;;;;;;;;;;;;;;;;;7991:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7991:189:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7557:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7557:208:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10559:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10559:153:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4812:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4812:256:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3470:270;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3470:270:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1441:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1441:109:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;674:116:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;674:116:17;;;;;;;;;;;;;;;;;;;;;;;;;;;287:117:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:117:28;;;;;;;;;;;;;;;;;;;;;;;;;;;1666:48:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1666:48:9;;;;;;;;;;;;;;;;;;;;;;;;;;;11695:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11695:575:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11078:611;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11078:611:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1136:208:26;1183:4;1199:27;1229:24;:22;:24::i;:::-;1199:54;;1293:1;1270:19;:24;;:67;;;;;1318:19;1298:16;:14;:16::i;:::-;:39;;1270:67;1263:74;;1136:208;;:::o;8470:225:9:-;502:66;8561:23;;873:47:18;884:10;896:5;917:1;903:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;903:16:18;;;;873:10;:47::i;:::-;922:17;;;;;;;;;;;;;;;;;;865:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;865:75:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8614:4:9;8620:5;3091:1;3046:47;;:33;3067:4;3073:5;3046:20;:33::i;:::-;:47;;;3095:22;;;;;;;;;;;;;;;;;;3038:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3038:80:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8641:47;1712:1;8676:4;8682:5;8641:21;:47::i;:::-;950:1:18;;8470:225:9;;;:::o;8972:188::-;9079:4;9085:5;2805:33;2826:4;2832:5;2805:20;:33::i;:::-;2791:47;;:10;:47;;;2840:21;;;;;;;;;;;;;;;;;;2783:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2783:79:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9106:47;1712:1;9141:4;9147:5;9106:21;:47::i;:::-;8972:188;;;;:::o;5568:165::-;5670:56;5687:7;5696:4;5702:5;5723:1;5709:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;5709:16:9;;;;5670;:56::i;:::-;5568:165;;;:::o;9468:208::-;9572:4;9595:16;:67;9612:11;:49;9624:36;9639:7;9648:4;9654:5;9624:14;:36::i;:::-;9612:49;;;;;;;;;;;;;;;;;;9595:67;;;;;;;;;;;;;;;;;:74;;;;9588:81;;9468:208;;;;;:::o;12493:339::-;12662:4;1484:66;12701:16;;12686:31;;;:11;:31;;;;12682:73;;;12740:4;12733:11;;;;12682:73;12772:53;12783:11;12796:1;12799:4;12805:6;12813:5;12820:4;12772:10;:53::i;:::-;12765:60;;12493:339;;;;;;;;:::o;1556:50::-;1604:1;1596:10;;1556:50;:::o;733:179:34:-;799:18;855:22;:20;:22::i;:::-;:40;;;896:7;855:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;855:49:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;855:49:34;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;855:49:34;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;855:49:34;;;;;;;;;;;;;;;;829:76;;733:179;;;:::o;2466:229:18:-;2515:7;2621:8;:6;:8::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2621:27:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2621:27:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2621:27:18;;;;;;;;;;;;;;;;2614:34;;2466:229;:::o;452:116:9:-;502:66;452:116;;;:::o;6294:309::-;6457:18;6430:4;6436:5;2805:33;2826:4;2832:5;2805:20;:33::i;:::-;2791:47;;:10;:47;;;2840:21;;;;;;;;;;;;;;;;;;2783:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2783:79:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6495:1;6478:7;:14;:18;:60;;1484:66;6522:16;;6478:60;;;6499:20;6511:7;6499:11;:20::i;:::-;6478:60;6457:81;;6548:48;6563:7;6572:4;6578:5;6585:10;6548:14;:48::i;:::-;6294:309;;;;;;;:::o;12276:211::-;12365:4;12381:22;12420:1;12406:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;12406:16:9;;;;12381:41;;12439;12453:4;12459:6;12467:5;12474;12439:13;:41::i;:::-;12432:48;;12276:211;;;;;;:::o;1333:99:32:-;1398:4;1421;1414:11;;1333:99;;;:::o;796:106:17:-;834:7;860:35;601:66;860:15;;:33;;;;:35::i;:::-;853:42;;796:106;:::o;889:137:26:-;944:7;970:49;353:66;970:29;;:47;;;;:49::i;:::-;963:56;;889:137;:::o;7045:204:9:-;7164:4;7170:5;2805:33;2826:4;2832:5;2805:20;:33::i;:::-;2791:47;;:10;:47;;;2840:21;;;;;;;;;;;;;;;;;;2783:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2783:79:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7191:51;7206:7;7215:4;7221:5;1604:1;1596:10;;7191:14;:51::i;:::-;7045:204;;;;;:::o;687:446:32:-;811:13;1019:14;755:27;775:6;755:19;:27::i;:::-;784:16;;;;;;;;;;;;;;;;;;747:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;747:54:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;827:18;:16;:18::i;:::-;811:34;;863:17;874:5;863:10;:17::i;:::-;882:24;;;;;;;;;;;;;;;;;;855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;855:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;269:1:23;922:13:32;;:6;:13;;;918:209;;;951:5;:14;;:37;974:4;966:21;;;951:37;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;951:37:32;918:209;;;1042:6;1036:23;;;1060:4;1036:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1036:29:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1036:29:32;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1036:29:32;;;;;;;;;;;;;;;;1019:46;;1085:6;1079:22;;;1102:5;1109:6;1079:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1079:37:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1079:37:32;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1079:37:32;;;;;;;;;;;;;;;;;918:209;687:446;;;:::o;10022:325:9:-;10156:5;10163;10170:7;10193:19;10215:16;:67;10232:11;:49;10244:36;10259:7;10268:4;10274:5;10244:14;:36::i;:::-;10232:49;;;;;;;;;;;;;;;;;;10215:67;;;;;;;;;;;;;;;;;10283:6;10215:75;;;;;;;;;;;;;;;;;10193:97;;10308:5;:8;;;;;;;;;;;;10318:5;:8;;;;;;;;;;;;10328:5;:11;;;;;;;;;;;;10300:40;;;;;;10022:325;;;;;;;;;:::o;1524:826:18:-;1616:4;1702:20;2106:16;2132:18;1637:16;:14;:16::i;:::-;1636:17;1632:60;;;1676:5;1669:12;;;;1632:60;1725:8;:6;:8::i;:::-;1702:31;;1780:1;1747:35;;1755:12;1747:35;;;1743:78;;;1805:5;1798:12;;;;1743:78;2170:2;2153:7;:14;:19;2132:40;;2212:7;2205:14;;2244:10;2239:3;2232:23;2281:12;:26;;;2308:7;2325:4;2332:5;2339:3;2281:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2281:62:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2281:62:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2281:62:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2281:62:18;;;;;;;;;;;;;;;;2274:69;;1524:826;;;;;;;;;:::o;918:231:34:-;971:18;1001:20;1024:8;:6;:8::i;:::-;:15;;;1368:66:45;1040:25:34;;330:66:36;1067:25:34;;1024:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1024:69:34;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1024:69:34;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1024:69:34;;;;;;;;;;;;;;;;1001:92;;1129:12;1103:39;;918:231;;:::o;1612:48:9:-;1657:2;1612:48;:::o;7991:189::-;8100:4;8106:5;2805:33;2826:4;2832:5;2805:20;:33::i;:::-;2791:47;;:10;:47;;;2840:21;;;;;;;;;;;;;;;;;;2783:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2783:79:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8127:46;8157:1;8161:4;8167:5;8127:21;:46::i;:::-;7991:189;;;;:::o;7557:208::-;7684:4;7690:5;2805:33;2826:4;2832:5;2805:20;:33::i;:::-;2791:47;;:10;:47;;;2840:21;;;;;;;;;;;;;;;;;;2783:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2783:79:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7711:47;7733:11;7746:4;7752:5;7711:21;:47::i;:::-;7557:208;;;;;:::o;10559:153::-;10639:7;10665:17;:40;10683:21;10692:4;10698:5;10683:8;:21::i;:::-;10665:40;;;;;;;;;;;;;;;;;;;;;;;;;;;10658:47;;10559:153;;;;:::o;4812:256::-;502:66;4932:23;;873:47:18;884:10;896:5;917:1;903:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;903:16:18;;;;873:10;:47::i;:::-;922:17;;;;;;;;;;;;;;;;;;865:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;865:75:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4985:4:9;4991:5;3091:1;3046:47;;:33;3067:4;3073:5;3046:20;:33::i;:::-;:47;;;3095:22;;;;;;;;;;;;;;;;;;3038:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3038:80:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5012:49;5030:7;5039:4;5045:5;5052:8;5012:17;:49::i;:::-;950:1:18;;4812:256:9;;;;;:::o;3470:270::-;651:1:26;623:24;:22;:24::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3545:13:9;:11;:13::i;:::-;3598:8;:6;:8::i;:::-;3576:31;;:10;:31;;;3609:22;;;;;;;;;;;;;;;;;;3568:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3568:64:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3643:90;3661:19;3682:4;502:66;3688:23;;3713:19;3643:17;:90::i;:::-;3470:270;:::o;1441:109::-;1484:66;1441:109;;;:::o;674:116:17:-;713:7;747:35;485:66;747:15;;:33;;;;:35::i;:::-;732:51;;674:116;:::o;287:117:28:-;331:4;277:2;354:24;:22;:24::i;:::-;:43;347:50;;287:117;:::o;1666:48:9:-;1712:1;1666:48;:::o;11695:575::-;11807:4;11823:17;12031;11843:11;:48;11855:35;11870:4;11876:6;11884:5;11855:14;:35::i;:::-;11843:48;;;;;;;;;;;;;;;;;;11823:68;;1604:1;1596:10;;11905:26;;;:9;:26;;;;;:78;;;;;11935:48;11946:9;11957:4;11963:6;11971:5;11978:4;11935:10;:48::i;:::-;11905:78;11901:120;;;12006:4;11999:11;;;;11901:120;12051:11;:54;12063:41;1657:2;12090:6;12098:5;12063:14;:41::i;:::-;12051:54;;;;;;;;;;;;;;;;;;12031:74;;1604:1;1596:10;;12119:26;;;:9;:26;;;;;:84;;;;;12149:54;12160:9;1657:2;12183:6;12191:5;12198:4;12149:10;:54::i;:::-;12119:84;12115:126;;;12226:4;12219:11;;;;12115:126;12258:5;12251:12;;11695:575;;;;;;;;;:::o;11078:611::-;11186:4;11469:20;11499:18;11534:2;11520:4;:11;:16;;;;;;;;11499:37;;11576:4;11569:11;;11605:10;11600:3;11593:23;11643:39;11657:4;11663:6;11671:5;11678:3;11643:13;:39::i;:::-;11636:46;;11078:611;;;;;;;;:::o;347:94:29:-;396:7;422:12;415:19;;347:94;:::o;19128:225:9:-;19271:11;19228:17;:40;19246:21;19255:4;19261:5;19246:8;:21::i;:::-;19228:40;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;19334:11;19297:49;;19327:5;19297:49;;;19321:4;19297:49;;;;;;;;;;;;19128:225;;;:::o;19520:187::-;19612:7;19679:4;19685:6;19693:5;19648:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19648:51:9;;;19638:62;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;19638:62:9;;;;;;;;;;;;;;;;19631:69;;19520:187;;;;;:::o;14404:1414::-;14600:4;14738:18;;:::i;:::-;14943:13;14966:18;14636:16;:29;14653:11;14636:29;;;;;;;;;;;;;;;;;:36;;;;14624:8;:48;;;;14620:108;;;14695:5;14688:12;;;;14620:108;14759:16;:29;14776:11;14759:29;;;;;;;;;;;;;;;;;14789:8;14759:39;;;;;;;;;;;;;;;;;;;14738:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1214:3;14813:29;;:5;:8;;;:29;;;14809:124;;;14865:57;14876:5;14883:11;14896:4;14902:6;14910:5;14917:4;14865:10;:57::i;:::-;14858:64;;;;14809:124;14995:5;:11;;;14987:20;;14966:41;;1157:3;15043:27;;:5;:8;;;:27;;;15039:627;;;15094:63;15117:5;:11;;;15131:4;15137:6;15145:5;15152:4;15094:11;:63::i;:::-;:71;;15164:1;15094:71;;;15160:1;15094:71;15086:79;;;;15192:1;15179:14;;15039:627;;;1022:3;15214:33;;:5;:8;;;:33;;;15210:456;;;15271:16;:14;:16::i;:::-;15263:24;;15210:456;;;1079:3;15308:30;;:5;:8;;;:30;;;15304:362;;;15362:14;:12;:14::i;:::-;15354:22;;15304:362;;;1271:3;15397:32;;:5;:8;;;:32;;;15393:273;;;15461:5;:11;;;15453:20;;15445:28;;15393:273;;;15520:4;:11;15508:5;:8;;;:23;;;;15504:74;;;15558:5;15551:12;;;;15504:74;15615:4;15620:5;:8;;;15615:14;;;;;;;;;;;;;;;;;;;;15599:32;;15591:40;;15393:273;15304:362;15210:456;15039:627;15696:6;15680:22;;;;;;;;15683:5;:8;;;15680:12;;;;;;;;;;:22;;;;;;;;;15676:78;;;15742:1;15733:5;15725:18;15718:25;;;;15676:78;15771:40;15779:5;15789;:8;;;15786:12;;;;;;;;;;15800:10;15771:7;:40::i;:::-;15764:47;;14404:1414;;;;;;;;;;;;:::o;13784:614::-;13849:7;13868:17;13941:22;14074:9;14139:20;14197:18;;:::i;:::-;13915:14;13898:32;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;13898:32:9;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13898:32:9;;;13888:43;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13888:43:9;;;;;;;;;;;;;;;;13868:63;;13966:16;:27;13983:9;13966:27;;;;;;;;;;;;;;;;;13941:52;;14025:1;14008:6;:13;;;;:18;14004:361;;;14086:1;14074:13;;14069:286;14093:14;:21;14089:1;:25;14069:286;;;14162:14;14177:1;14162:17;;;;;;;;;;;;;;;;;;14139:40;;14218:86;;;;;;;;;14224:27;14238:12;14224:13;:27::i;:::-;14218:86;;;;;;14253:27;14267:12;14253:13;:27::i;:::-;14218:86;;;;;;14290:12;14218:86;;;;;14197:107;;14322:6;14334:5;14322:18;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;14322:18:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14116:3;;;;;;;14069:286;;;14004:361;14382:9;14375:16;;13784:614;;;;;;;;:::o;13252:526::-;13435:24;13500;13414:11;13362;:49;13374:36;13389:7;13398:4;13404:5;13374:14;:36::i;:::-;13362:49;;;;;;;;;;;;;;;;;:63;;;;;;;1604:1;1596:10;;13462:28;;;:11;:28;;;;;13435:55;;13527:19;:54;;;;;1484:66;13565:16;;13550:31;;;:11;:31;;;;;13527:54;13500:81;;13626:5;13597:56;;;13620:4;13597:56;;13611:7;13597:56;;;13633:19;13597:56;;;;;;;;;;;;;;;;;;;;;;13667:19;13663:109;;;13742:5;13707:54;;;13736:4;13707:54;;13727:7;13707:54;;;13749:11;13707:54;;;;;;;;;;;;;;;;;;;;;;;;13663:109;13252:526;;;;;;:::o;379:134:31:-;447:12;496:8;490:15;482:23;;480:27;;;:::o;519:134::-;587:12;636:8;630:15;622:23;;620:27;;;:::o;426:244:27:-;486:4;576:12;525:1;506:21;;:7;: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;19359:155:9:-;19431:7;19492:6;19500:5;19467:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19467:39:9;;;19457:50;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;19457:50:9;;;;;;;;;;;;;;;;19450:57;;19359:155;;;;:::o;12938:225::-;13048:54;13063:7;13072:4;13078:5;1484:66;13085:16;;13048:14;:54::i;:::-;13112:44;13134:8;13144:4;13150:5;13112:21;:44::i;:::-;12938:225;;;;:::o;1455:123:26:-;651:1;623:24;:22;:24::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1506;1554:16;:14;:16::i;:::-;353:66;1506:29;;:47;;;;;:65;;;;:::i;:::-;1455:123::o;239:134:31:-;307:12;356:8;350:15;342:23;;340:27;;;:::o;15824:1304:9:-;15987:4;16054:21;16089:19;16122;16256:11;16467:13;16490;16583:7;16899;16028:10;16011:27;;;;;;;;16014:6;:9;;;16011:13;;;;;;;;;;:27;;;;;;;;;16007:450;;;16203:39;16228:6;:12;;;16220:21;;16203:16;:39::i;:::-;16156:86;;;;;;;;;;;;16270:66;16281:11;16294:14;16310:4;16316:6;16324:5;16331:4;16270:10;:66::i;:::-;16256:80;;16358:88;16369:11;16382:6;:36;;16406:12;16382:36;;;16391:12;16382:36;16420:4;16426:6;16434:5;16441:4;16358:10;:88::i;:::-;16351:95;;;;16007:450;16534:39;16559:6;:12;;;16551:21;;16534:16;:39::i;:::-;16514:59;;;;;;;;;16593:58;16604:11;16617:6;16625:4;16631:6;16639:5;16646:4;16593:10;:58::i;:::-;16583:68;;16683:6;16666:23;;;;;;;;16669:6;:9;;;16666:13;;;;;;;;;;:23;;;;;;;;;16662:64;;;16713:2;16712:3;16705:10;;;;16662:64;16740:2;:28;;;;;16763:5;16746:22;;;;;;;;16749:6;:9;;;16746:13;;;;;;;;;;:22;;;;;;;;;16740:28;16736:70;;;16791:4;16784:11;;;;16736:70;16821:2;16820:3;:30;;;;;16844:6;16827:23;;;;;;;;16830:6;:9;;;16827:13;;;;;;;;;;:23;;;;;;;;;16820:30;16816:73;;;16873:5;16866:12;;;;16816:73;16909:58;16920:11;16933:6;16941:4;16947:6;16955:5;16962:4;16909:10;:58::i;:::-;16899:68;;16999:6;16982:23;;;;;;;;16985:6;:9;;;16982:13;;;;;;;;;;:23;;;;;;;;;16978:69;;;17034:2;17028:8;;:2;:8;;;;17021:15;;;;16978:69;17064:2;17057:9;;15824:1304;;;;;;;;;;;;;;;;;:::o;17865:1192::-;17994:4;18010:10;18165:26;18258:22;18310:7;18525:12;18654:11;18023;:22;;;:31;;;;18010:44;;18217:3;18222:4;18228:6;18236:5;18243:4;18194:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18194:54:9;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18194:54:9;;;;;;;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;;;18194:54:9;18165:83;;1823:5;18258:41;;18447:1;18444;18428:13;18422:20;18415:4;18400:13;18396:24;18383:11;18367:14;18356:93;18350:99;;18474:2;18473:3;18469:46;;;18499:5;18492:12;;;;18469:46;18566:14;18558:22;;18603:2;18595:4;:10;;18591:53;;;18628:5;18621:12;;;;18591:53;18715:4;18709:11;18790:4;18787:1;18782:3;18767:28;18863:3;18857:10;18847:20;;18941:1;18936:3;18929:14;18684:343;19044:6;19037:13;;17865:1192;;;;;;;;;;;;;;:::o;926:144:29:-;973:7;999:15;992:22;;926:144;:::o;17134:725:9:-;17206:4;17233:5;17226:12;;;;;;;;:3;:12;;;;;;;;;17222:34;;;17254:2;17248;:8;17241:15;;;;17222:34;17336:6;17329:13;;;;;;;;:3;:13;;;;;;;;;17325:34;;;17357:2;17351;:8;;17344:15;;;;17325:34;17439:5;17432:12;;;;;;;;:3;:12;;;;;;;;;17428:33;;;17459:2;17454;:7;17447:14;;;;17428:33;17542:5;17535:12;;;;;;;;:3;:12;;;;;;;;;17531:33;;;17562:2;17557;:7;17550:14;;;;17531:33;17645:6;17638:13;;;;;;;;:3;:13;;;;;;;;;17634:34;;;17666:2;17660;:8;;17653:15;;;;17634:34;17748:6;17741:13;;;;;;;;:3;:13;;;;;;;;;17737:34;;;17769:2;17763;:8;;17756:15;;;;17737:34;17847:5;17840:12;;17134:725;;;;;;:::o;2624:112:10:-;2682:7;2721:6;2714:2;:14;;;;;2701:28;;2624:112;;;:::o;2506:::-;2564:7;2603:6;2596:2;:14;;;;;2583:28;;2506:112;;;:::o;1028:119:31:-;1134:4;1124:8;1117:22;1115:26;;:::o;2742:192:10:-;2803:8;2813;2823;2854:2;2843:14;;2885:5;2878:2;:13;;;;;2867:25;;2920:5;2913:2;:13;;;;;2902:25;;2742:192;;;;;:::o;251:19458:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity 0.4.24;\n\nimport \"../apps/AragonApp.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        // Force cast the bytes array into a uint256[], by overwriting its length\n        // Note that the uint256[] doesn't need to be initialized as we immediately overwrite it\n        // with _how and a new length, and _how becomes invalid from this point forward\n        uint256[] memory how;\n        uint256 intsLength = _how.length / 32;\n        assembly {\n            how := _how\n            mstore(how, intsLength)\n        }\n\n        return hasPermission(_who, _where, _what, 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": [
        7166
      ]
    },
    "id": 7167,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5864,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "../apps/AragonApp.sol",
        "id": 5865,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 8476,
        "src": "25:31:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/TimeHelpers.sol",
        "file": "../common/TimeHelpers.sol",
        "id": 5866,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 8870,
        "src": "57:35:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/ACLSyntaxSugar.sol",
        "file": "./ACLSyntaxSugar.sol",
        "id": 5867,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 7661,
        "src": "93:30:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACL.sol",
        "file": "./IACL.sol",
        "id": 5868,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 7682,
        "src": "124:20:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACLOracle.sol",
        "file": "./IACLOracle.sol",
        "id": 5869,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 7699,
        "src": "145:26:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5870,
              "name": "IACL",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7681,
              "src": "267:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IACL_$7681",
                "typeString": "contract IACL"
              }
            },
            "id": 5871,
            "nodeType": "InheritanceSpecifier",
            "src": "267:4:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5872,
              "name": "TimeHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8869,
              "src": "273:11:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeHelpers_$8869",
                "typeString": "contract TimeHelpers"
              }
            },
            "id": 5873,
            "nodeType": "InheritanceSpecifier",
            "src": "273:11:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5874,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8475,
              "src": "286:9:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$8475",
                "typeString": "contract AragonApp"
              }
            },
            "id": 5875,
            "nodeType": "InheritanceSpecifier",
            "src": "286:9:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5876,
              "name": "ACLHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7660,
              "src": "297:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ACLHelpers_$7660",
                "typeString": "contract ACLHelpers"
              }
            },
            "id": 5877,
            "nodeType": "InheritanceSpecifier",
            "src": "297:10:9"
          }
        ],
        "contractDependencies": [
          7585,
          7660,
          7681,
          8347,
          8475,
          8488,
          8621,
          8663,
          8761,
          8789,
          8822,
          8869,
          9066,
          9476,
          9503,
          10769
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 7166,
        "linearizedBaseContracts": [
          7166,
          7660,
          8475,
          7585,
          9476,
          10769,
          9503,
          9066,
          8789,
          8621,
          8663,
          8488,
          8822,
          8761,
          8869,
          8347,
          7681
        ],
        "name": "ACL",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 5880,
            "name": "CREATE_PERMISSIONS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "452:116:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 5878,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "452:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307830623731396233336338336238653564333030633532316362386235346165396264393333393936613134626566386332663465303238356432643234303061",
              "id": 5879,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "502:66:9",
              "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": 5894,
            "members": [
              {
                "id": 5881,
                "name": "NONE",
                "nodeType": "EnumValue",
                "src": "585:4:9"
              },
              {
                "id": 5882,
                "name": "EQ",
                "nodeType": "EnumValue",
                "src": "591:2:9"
              },
              {
                "id": 5883,
                "name": "NEQ",
                "nodeType": "EnumValue",
                "src": "595:3:9"
              },
              {
                "id": 5884,
                "name": "GT",
                "nodeType": "EnumValue",
                "src": "600:2:9"
              },
              {
                "id": 5885,
                "name": "LT",
                "nodeType": "EnumValue",
                "src": "604:2:9"
              },
              {
                "id": 5886,
                "name": "GTE",
                "nodeType": "EnumValue",
                "src": "608:3:9"
              },
              {
                "id": 5887,
                "name": "LTE",
                "nodeType": "EnumValue",
                "src": "613:3:9"
              },
              {
                "id": 5888,
                "name": "RET",
                "nodeType": "EnumValue",
                "src": "618:3:9"
              },
              {
                "id": 5889,
                "name": "NOT",
                "nodeType": "EnumValue",
                "src": "623:3:9"
              },
              {
                "id": 5890,
                "name": "AND",
                "nodeType": "EnumValue",
                "src": "628:3:9"
              },
              {
                "id": 5891,
                "name": "OR",
                "nodeType": "EnumValue",
                "src": "633:2:9"
              },
              {
                "id": 5892,
                "name": "XOR",
                "nodeType": "EnumValue",
                "src": "637:3:9"
              },
              {
                "id": 5893,
                "name": "IF_ELSE",
                "nodeType": "EnumValue",
                "src": "642:7:9"
              }
            ],
            "name": "Op",
            "nodeType": "EnumDefinition",
            "src": "575:76:9"
          },
          {
            "canonicalName": "ACL.Param",
            "id": 5901,
            "members": [
              {
                "constant": false,
                "id": 5896,
                "name": "id",
                "nodeType": "VariableDeclaration",
                "scope": 5901,
                "src": "692:8:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 5895,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "692:5:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 5898,
                "name": "op",
                "nodeType": "VariableDeclaration",
                "scope": 5901,
                "src": "710:8:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 5897,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "710:5:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 5900,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 5901,
                "src": "728:13:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint240",
                  "typeString": "uint240"
                },
                "typeName": {
                  "id": 5899,
                  "name": "uint240",
                  "nodeType": "ElementaryTypeName",
                  "src": "728:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Param",
            "nodeType": "StructDefinition",
            "scope": 7166,
            "src": "669:299:9",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5904,
            "name": "BLOCK_NUMBER_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "974:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5902,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "974:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323030",
              "id": 5903,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1022:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_200_by_1",
                "typeString": "int_const 200"
              },
              "value": "200"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5907,
            "name": "TIMESTAMP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1031:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5905,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1031:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323031",
              "id": 5906,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1079:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_201_by_1",
                "typeString": "int_const 201"
              },
              "value": "201"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5910,
            "name": "ORACLE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1109:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5908,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1109:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323033",
              "id": 5909,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1157:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_203_by_1",
                "typeString": "int_const 203"
              },
              "value": "203"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5913,
            "name": "LOGIC_OP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1166:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5911,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1166:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323034",
              "id": 5912,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1214:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_204_by_1",
                "typeString": "int_const 204"
              },
              "value": "204"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5916,
            "name": "PARAM_VALUE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1223:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5914,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1223:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323035",
              "id": 5915,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1271:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_205_by_1",
                "typeString": "int_const 205"
              },
              "value": "205"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5919,
            "name": "EMPTY_PARAM_HASH",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1441:109:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 5917,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1441:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307832393064656364393534386236326138643630333435613938383338366663383462613662633935343834303038663633363266393331363065663365353633",
              "id": 5918,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1484:66:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18569430475105882587588266137607568536673111973893317399460219858819262702947_by_1",
                "typeString": "int_const 1856...(69 digits omitted)...2947"
              },
              "value": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5924,
            "name": "NO_PERMISSION",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1556:50:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 5920,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1556:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "30",
                  "id": 5922,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1604:1:9",
                  "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": 5921,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1596:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": "bytes32"
              },
              "id": 5923,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1596:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5930,
            "name": "ANY_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1612:48:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 5925,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1612:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 5928,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1657:2:9",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 5927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1658:1:9",
                    "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": 5926,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1649:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 5929,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1649:11:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5935,
            "name": "BURN_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1666:48:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 5931,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1666:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 5933,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1712:1:9",
                  "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": 5932,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1704:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 5934,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1704:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5938,
            "name": "ORACLE_CHECK_GAS",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1778:50:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5936,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1778:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3330303030",
              "id": 5937,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1823:5:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_30000_by_1",
                "typeString": "int_const 30000"
              },
              "value": "30000"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5941,
            "name": "ERROR_AUTH_INIT_KERNEL",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1835:71:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 5939,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1835:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f494e49545f4b45524e454c",
              "id": 5940,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1884:22:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b821e30579b9561be7f0b7b902ba336b331e39831108d09772a61766a2b465fb",
                "typeString": "literal_string \"ACL_AUTH_INIT_KERNEL\""
              },
              "value": "ACL_AUTH_INIT_KERNEL"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 5944,
            "name": "ERROR_AUTH_NO_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1912:69:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 5942,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1912:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f4e4f5f4d414e41474552",
              "id": 5943,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1960:21:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e2d6e781abad74150d786cba50506e9dd4199308c8c71d28e79e0e9232faf41e",
                "typeString": "literal_string \"ACL_AUTH_NO_MANAGER\""
              },
              "value": "ACL_AUTH_NO_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 5947,
            "name": "ERROR_EXISTENT_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1987:71:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 5945,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1987:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f4558495354454e545f4d414e41474552",
              "id": 5946,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2036:22:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4c0d68e0b4f86bab649749fdab1e22b7429153357a2704a5fd7b646a35ecc4d0",
                "typeString": "literal_string \"ACL_EXISTENT_MANAGER\""
              },
              "value": "ACL_EXISTENT_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5951,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "2105:49:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
              "typeString": "mapping(bytes32 => bytes32)"
            },
            "typeName": {
              "id": 5950,
              "keyType": {
                "id": 5948,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2114:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2105:28:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                "typeString": "mapping(bytes32 => bytes32)"
              },
              "valueType": {
                "id": 5949,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2125:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5956,
            "name": "permissionParams",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "2195:54:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
              "typeString": "mapping(bytes32 => struct ACL.Param[])"
            },
            "typeName": {
              "id": 5955,
              "keyType": {
                "id": 5952,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2204:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2195:28:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                "typeString": "mapping(bytes32 => struct ACL.Param[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 5953,
                  "name": "Param",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5901,
                  "src": "2215:5:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                    "typeString": "struct ACL.Param"
                  }
                },
                "id": 5954,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2215:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                  "typeString": "struct ACL.Param[]"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5960,
            "name": "permissionManager",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "2323:55:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 5959,
              "keyType": {
                "id": 5957,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2332:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2323:28:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 5958,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2343:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5970,
            "name": "SetPermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5962,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5970,
                  "src": "2405:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5961,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2405:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5964,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 5970,
                  "src": "2429:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5963,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2429:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5966,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 5970,
                  "src": "2450:20:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5965,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2450:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5968,
                  "indexed": false,
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 5970,
                  "src": "2472:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5967,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2472:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2404:81:9"
            },
            "src": "2385:101:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5980,
            "name": "SetPermissionParams",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5972,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5980,
                  "src": "2517:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5971,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2517:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5974,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 5980,
                  "src": "2541:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2541:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5976,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 5980,
                  "src": "2562:20:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2562:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5978,
                  "indexed": false,
                  "name": "paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 5980,
                  "src": "2584:18:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5977,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2584:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2516:87:9"
            },
            "src": "2491:113:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5988,
            "name": "ChangePermissionManager",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5982,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 5988,
                  "src": "2639:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2639:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5984,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 5988,
                  "src": "2660:20:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5983,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2660:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5986,
                  "indexed": true,
                  "name": "manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 5988,
                  "src": "2682:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5985,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2682:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2638:68:9"
            },
            "src": "2609:98:9"
          },
          {
            "body": {
              "id": 6006,
              "nodeType": "Block",
              "src": "2773:107:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5995,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "2791:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 5996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2791:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5998,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5990,
                              "src": "2826:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5999,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5992,
                              "src": "2832:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 5997,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6319,
                            "src": "2805:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 6000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2805:33:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2791:47:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6002,
                        "name": "ERROR_AUTH_NO_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5944,
                        "src": "2840:21:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 5994,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "2783:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2783:79:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6004,
                  "nodeType": "ExpressionStatement",
                  "src": "2783:79:9"
                },
                {
                  "id": 6005,
                  "nodeType": "PlaceholderStatement",
                  "src": "2872:1:9"
                }
              ]
            },
            "documentation": null,
            "id": 6007,
            "name": "onlyPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 5993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5990,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6007,
                  "src": "2744:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5989,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2744:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5992,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6007,
                  "src": "2758:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5991,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2758:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2743:29:9"
            },
            "src": "2713:167:9",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6026,
              "nodeType": "Block",
              "src": "2944:192:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6015,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6009,
                              "src": "3067:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6016,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6011,
                              "src": "3073:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 6014,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6319,
                            "src": "3046:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 6017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3046:33:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3091:1:9",
                              "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": 6018,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3083:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3083:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3046:47:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6022,
                        "name": "ERROR_EXISTENT_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5947,
                        "src": "3095:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 6013,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "3038:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3038:80:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6024,
                  "nodeType": "ExpressionStatement",
                  "src": "3038:80:9"
                },
                {
                  "id": 6025,
                  "nodeType": "PlaceholderStatement",
                  "src": "3128:1:9"
                }
              ]
            },
            "documentation": null,
            "id": 6027,
            "name": "noPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6009,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6027,
                  "src": "2915:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6008,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2915:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6011,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6027,
                  "src": "2929:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6010,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2929:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2914:29:9"
            },
            "src": "2886:250:9",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6055,
              "nodeType": "Block",
              "src": "3535:205:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6034,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8746,
                      "src": "3545:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3545:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6036,
                  "nodeType": "ExpressionStatement",
                  "src": "3545:13:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6038,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "3576:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3576:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 6041,
                                "name": "kernel",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8310,
                                "src": "3598:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IKernel_$10248_$",
                                  "typeString": "function () view returns (contract IKernel)"
                                }
                              },
                              "id": 6042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3598:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKernel_$10248",
                                "typeString": "contract IKernel"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IKernel_$10248",
                                "typeString": "contract IKernel"
                              }
                            ],
                            "id": 6040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3590:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3590:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3576:31:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6045,
                        "name": "ERROR_AUTH_INIT_KERNEL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5941,
                        "src": "3609:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 6037,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "3568:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3568:64:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6047,
                  "nodeType": "ExpressionStatement",
                  "src": "3568:64:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6049,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6029,
                        "src": "3661:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6050,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12761,
                        "src": "3682:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$7166",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6051,
                        "name": "CREATE_PERMISSIONS_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5880,
                        "src": "3688:23:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6052,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6029,
                        "src": "3713:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$7166",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6048,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6507,
                      "src": "3643:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 6053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3643:90:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6054,
                  "nodeType": "ExpressionStatement",
                  "src": "3643:90:9"
                }
              ]
            },
            "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": 6056,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 6032,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6031,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8693,
                  "src": "3526:8:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3526:8:9"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6029,
                  "name": "_permissionsCreator",
                  "nodeType": "VariableDeclaration",
                  "scope": 6056,
                  "src": "3490:27:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6028,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3490:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3489:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6033,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3535:0:9"
            },
            "scope": 7166,
            "src": "3470:270:9",
            "stateMutability": "nonpayable",
            "superFunction": 7667,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6081,
              "nodeType": "Block",
              "src": "5002:66:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6075,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6058,
                        "src": "5030:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6076,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6060,
                        "src": "5039:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6077,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6062,
                        "src": "5045:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6078,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6064,
                        "src": "5052:8:9",
                        "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": 6074,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6507,
                      "src": "5012:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 6079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5012:49:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6080,
                  "nodeType": "ExpressionStatement",
                  "src": "5012:49:9"
                }
              ]
            },
            "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": 6082,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6067,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5880,
                    "src": "4932:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6068,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6066,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8387,
                  "src": "4927:4:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4927:29:9"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6070,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6060,
                    "src": "4985:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6071,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6062,
                    "src": "4991:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6072,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6069,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6027,
                  "src": "4965:19:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4965:32:9"
              }
            ],
            "name": "createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6058,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "4838:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6057,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4838:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6060,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "4855:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4855:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6062,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "4869:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6061,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4869:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6064,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "4884:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6063,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4884:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4837:64:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6073,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5002:0:9"
            },
            "scope": 7166,
            "src": "4812:256:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6102,
              "nodeType": "Block",
              "src": "5660:73:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6092,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "5687:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6093,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6086,
                        "src": "5696:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6094,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6088,
                        "src": "5702:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6098,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5723:1:9",
                            "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": 6097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "5709:13:9",
                          "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": 6095,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5713:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6096,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "5713:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 6099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5709:16:9",
                        "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": 6091,
                      "name": "grantPermissionP",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6139,
                      "src": "5670:16:9",
                      "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": 6100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5670:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6101,
                  "nodeType": "ExpressionStatement",
                  "src": "5670:56:9"
                }
              ]
            },
            "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": 6103,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "grantPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6084,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6103,
                  "src": "5593:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6083,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5593:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6086,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6103,
                  "src": "5610:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6085,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5610:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6088,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6103,
                  "src": "5624:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6087,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5624:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5592:46:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6090,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5660:0:9"
            },
            "scope": 7166,
            "src": "5568:165:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6138,
              "nodeType": "Block",
              "src": "6447:156:9",
              "statements": [
                {
                  "assignments": [
                    6120
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6120,
                      "name": "paramsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 6139,
                      "src": "6457:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6119,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6457:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6130,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6124,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6121,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6112,
                          "src": "6478:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 6122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6478:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6495:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6478:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 6128,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5919,
                      "src": "6522:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 6129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6478:60:9",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6126,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6112,
                          "src": "6511:7:9",
                          "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": 6125,
                        "name": "_saveParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6633,
                        "src": "6499:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint256[] memory) returns (bytes32)"
                        }
                      },
                      "id": 6127,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6499:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6457:81:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6132,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6105,
                        "src": "6563:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6133,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6107,
                        "src": "6572:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6134,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6109,
                        "src": "6578:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6135,
                        "name": "paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6120,
                        "src": "6585:10:9",
                        "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": 6131,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6560,
                      "src": "6548:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 6136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6548:48:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6137,
                  "nodeType": "ExpressionStatement",
                  "src": "6548:48:9"
                }
              ]
            },
            "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": 6139,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6115,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6107,
                    "src": "6430:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6116,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6109,
                    "src": "6436:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6117,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6114,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "6408:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6408:34:9"
              }
            ],
            "name": "grantPermissionP",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6105,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6139,
                  "src": "6320:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6104,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6320:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6107,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6139,
                  "src": "6337:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6106,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6337:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6109,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6139,
                  "src": "6351:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6108,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6351:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6112,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 6139,
                  "src": "6366:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6110,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6366:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6111,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6366:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6319:65:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6447:0:9"
            },
            "scope": 7166,
            "src": "6294:309:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6159,
              "nodeType": "Block",
              "src": "7181:68:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6153,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6141,
                        "src": "7206:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6154,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6143,
                        "src": "7215:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6155,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6145,
                        "src": "7221:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6156,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5924,
                        "src": "7228:13:9",
                        "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": 6152,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6560,
                      "src": "7191:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 6157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7191:51:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6158,
                  "nodeType": "ExpressionStatement",
                  "src": "7191:51:9"
                }
              ]
            },
            "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": 6160,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6148,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6143,
                    "src": "7164:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6149,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6145,
                    "src": "7170:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6150,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6147,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "7142:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7142:34:9"
              }
            ],
            "name": "revokePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6146,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6141,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6160,
                  "src": "7071:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6140,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7071:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6143,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6160,
                  "src": "7088:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6142,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7088:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6145,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6160,
                  "src": "7102:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6144,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7102:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7070:46:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6151,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7181:0:9"
            },
            "scope": 7166,
            "src": "7045:204:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6179,
              "nodeType": "Block",
              "src": "7701:64:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6174,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6162,
                        "src": "7733:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6175,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6164,
                        "src": "7746:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6176,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6166,
                        "src": "7752:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6173,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "7711:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7711:47:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6178,
                  "nodeType": "ExpressionStatement",
                  "src": "7711:47:9"
                }
              ]
            },
            "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": 6180,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6169,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6164,
                    "src": "7684:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6170,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6166,
                    "src": "7690:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6171,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6168,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "7662:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7662:34:9"
              }
            ],
            "name": "setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6162,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 6180,
                  "src": "7587:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7587:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6164,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6180,
                  "src": "7608:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6163,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7608:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6166,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6180,
                  "src": "7622:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6165,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7622:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7586:50:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6172,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7701:0:9"
            },
            "scope": 7166,
            "src": "7557:208:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6199,
              "nodeType": "Block",
              "src": "8117:63:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6193,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8157:1:9",
                            "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": 6192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8149:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8149:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6195,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6182,
                        "src": "8161:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6196,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6184,
                        "src": "8167:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6191,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "8127:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8127:46:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6198,
                  "nodeType": "ExpressionStatement",
                  "src": "8127:46:9"
                }
              ]
            },
            "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": 6200,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6187,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6182,
                    "src": "8100:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6188,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6184,
                    "src": "8106:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6189,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6186,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "8078:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8078:34:9"
              }
            ],
            "name": "removePermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6182,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6200,
                  "src": "8024:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6181,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8024:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6184,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6200,
                  "src": "8038:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6183,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8038:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8023:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6190,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8117:0:9"
            },
            "scope": 7166,
            "src": "7991:189:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6220,
              "nodeType": "Block",
              "src": "8631:64:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6215,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5935,
                        "src": "8663:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6216,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "8676:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6217,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6204,
                        "src": "8682:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6214,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "8641:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8641:47:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6219,
                  "nodeType": "ExpressionStatement",
                  "src": "8641:47:9"
                }
              ]
            },
            "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": 6221,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6207,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5880,
                    "src": "8561:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6208,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6206,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8387,
                  "src": "8556:4:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8556:29:9"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6210,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6202,
                    "src": "8614:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6211,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6204,
                    "src": "8620:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6212,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6209,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6027,
                  "src": "8594:19:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8594:32:9"
              }
            ],
            "name": "createBurnedPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6205,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6202,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6221,
                  "src": "8502:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6201,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8502:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6204,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6221,
                  "src": "8516:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6203,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8516:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8501:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8631:0:9"
            },
            "scope": 7166,
            "src": "8470:225:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6238,
              "nodeType": "Block",
              "src": "9096:64:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6233,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5935,
                        "src": "9128:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6234,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6223,
                        "src": "9141:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6235,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6225,
                        "src": "9147:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6232,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "9106:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9106:47:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6237,
                  "nodeType": "ExpressionStatement",
                  "src": "9106:47:9"
                }
              ]
            },
            "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": 6239,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6228,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6223,
                    "src": "9079:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6229,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6225,
                    "src": "9085:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6230,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6227,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "9057:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9057:34:9"
              }
            ],
            "name": "burnPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6223,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6239,
                  "src": "9003:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6222,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9003:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6225,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6239,
                  "src": "9017:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6224,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9017:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9002:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9096:0:9"
            },
            "scope": 7166,
            "src": "8972:188:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6261,
              "nodeType": "Block",
              "src": "9578:98:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6250,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5956,
                        "src": "9595:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 6258,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6251,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5951,
                          "src": "9612:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 6257,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6253,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6241,
                              "src": "9639:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6254,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6243,
                              "src": "9648:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6255,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6245,
                              "src": "9654:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 6252,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7165,
                            "src": "9624:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 6256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9624:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9612:49:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9595:67:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 6259,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9595:74:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6249,
                  "id": 6260,
                  "nodeType": "Return",
                  "src": "9588:81:9"
                }
              ]
            },
            "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": 6262,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParamsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6241,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6262,
                  "src": "9503:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9503:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6243,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6262,
                  "src": "9520:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9520:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6245,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6262,
                  "src": "9534:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6244,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9534:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9502:46:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6248,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6262,
                  "src": "9572:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6247,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9572:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9571:6:9"
            },
            "scope": 7166,
            "src": "9468:208:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6301,
              "nodeType": "Block",
              "src": "10183:164:9",
              "statements": [
                {
                  "assignments": [
                    6280
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6280,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 6302,
                      "src": "10193:19:9",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 6279,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5901,
                        "src": "10193:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6292,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6281,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5956,
                        "src": "10215:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 6289,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6282,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5951,
                          "src": "10232:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 6288,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6284,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6264,
                              "src": "10259:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6285,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6266,
                              "src": "10268:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6286,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6268,
                              "src": "10274:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 6283,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7165,
                            "src": "10244:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 6287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10244:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10232:49:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10215:67:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 6291,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6290,
                      "name": "_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6270,
                      "src": "10283:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10215:75:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$5901_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10193:97:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6293,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6280,
                          "src": "10308:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 6294,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5896,
                        "src": "10308:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6295,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6280,
                          "src": "10318:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 6296,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "op",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5898,
                        "src": "10318:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6297,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6280,
                          "src": "10328:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 6298,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5900,
                        "src": "10328:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "id": 6299,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "10307:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_uint8_$_t_uint240_$",
                      "typeString": "tuple(uint8,uint8,uint240)"
                    }
                  },
                  "functionReturnParameters": 6278,
                  "id": 6300,
                  "nodeType": "Return",
                  "src": "10300:40:9"
                }
              ]
            },
            "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": 6302,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6264,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10050:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10050:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6266,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10067:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6265,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10067:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6268,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10081:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6267,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10081:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6270,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10096:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6269,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10096:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10049:59:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6278,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6273,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10156:5:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 6272,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10156:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6275,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10163:5:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 6274,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10163:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6277,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10170:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  },
                  "typeName": {
                    "id": 6276,
                    "name": "uint240",
                    "nodeType": "ElementaryTypeName",
                    "src": "10170:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint240",
                      "typeString": "uint240"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10155:23:9"
            },
            "scope": 7166,
            "src": "10022:325:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6318,
              "nodeType": "Block",
              "src": "10648:64:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6311,
                      "name": "permissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5960,
                      "src": "10665:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 6316,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6313,
                          "name": "_app",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6304,
                          "src": "10692:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6314,
                          "name": "_role",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6306,
                          "src": "10698:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6312,
                        "name": "roleHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7143,
                        "src": "10683:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 6315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10683:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10665:40:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6310,
                  "id": 6317,
                  "nodeType": "Return",
                  "src": "10658:47:9"
                }
              ]
            },
            "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": 6319,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6304,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6319,
                  "src": "10589:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6303,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10589:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6306,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6319,
                  "src": "10603:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6305,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10603:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10588:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6309,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6319,
                  "src": "10639:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6308,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10639:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10638:9:9"
            },
            "scope": 7166,
            "src": "10559:153:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6352,
              "nodeType": "Block",
              "src": "11192:497:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6335,
                      "name": "how",
                      "nodeType": "VariableDeclaration",
                      "scope": 6353,
                      "src": "11469:20:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 6333,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11469:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6334,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "11469:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6336,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11469:20:9"
                },
                {
                  "assignments": [
                    6338
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6338,
                      "name": "intsLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 6353,
                      "src": "11499:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6337,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11499:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6343,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6339,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6327,
                        "src": "11520:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 6340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11520:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 6341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11534:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "11520:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11499:37:9"
                },
                {
                  "externalReferences": [
                    {
                      "_how": {
                        "declaration": 6327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11576:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "how": {
                        "declaration": 6335,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11569:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "how": {
                        "declaration": 6335,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11600:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "intsLength": {
                        "declaration": 6338,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11605:10:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 6344,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    how := _how\n    mstore(how, intsLength)\n}",
                  "src": "11546:96:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6346,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6321,
                        "src": "11657:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6347,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6323,
                        "src": "11663:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6348,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6325,
                        "src": "11671:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6349,
                        "name": "how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6335,
                        "src": "11678:3:9",
                        "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": 6345,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6353,
                        6420,
                        6449
                      ],
                      "referencedDeclaration": 6420,
                      "src": "11643:13:9",
                      "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": 6350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11643:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6331,
                  "id": 6351,
                  "nodeType": "Return",
                  "src": "11636:46:9"
                }
              ]
            },
            "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": 6353,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6321,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11101:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6320,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11101:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6323,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11115:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6322,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11115:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6325,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11131:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6324,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11131:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6327,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11146:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6326,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11146:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11100:64:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6330,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11186:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6329,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11186:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11185:6:9"
            },
            "scope": 7166,
            "src": "11078:611:9",
            "stateMutability": "view",
            "superFunction": 7680,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6419,
              "nodeType": "Block",
              "src": "11813:457:9",
              "statements": [
                {
                  "assignments": [
                    6368
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6368,
                      "name": "whoParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 6420,
                      "src": "11823:17:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6367,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11823:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6376,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6369,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5951,
                      "src": "11843:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 6375,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6371,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6355,
                          "src": "11870:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6372,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6357,
                          "src": "11876:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6373,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6359,
                          "src": "11884:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6370,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7165,
                        "src": "11855:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 6374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11855:35:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11843:48:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11823:68:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 6379,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6377,
                        "name": "whoParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6368,
                        "src": "11905:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6378,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5924,
                        "src": "11918:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11905:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6381,
                          "name": "whoParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6368,
                          "src": "11946:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6382,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6355,
                          "src": "11957:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6383,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6357,
                          "src": "11963:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6384,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6359,
                          "src": "11971:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6385,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6362,
                          "src": "11978:4:9",
                          "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": 6380,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6482,
                        "src": "11935:10:9",
                        "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": 6386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11935:48:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11905:78:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6391,
                  "nodeType": "IfStatement",
                  "src": "11901:120:9",
                  "trueBody": {
                    "id": 6390,
                    "nodeType": "Block",
                    "src": "11985:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12006:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6366,
                        "id": 6389,
                        "nodeType": "Return",
                        "src": "11999:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6393
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6393,
                      "name": "anyParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 6420,
                      "src": "12031:17:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6392,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12031:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6401,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6394,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5951,
                      "src": "12051:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 6400,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6396,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5930,
                          "src": "12078:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6397,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6357,
                          "src": "12090:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6398,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6359,
                          "src": "12098:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6395,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7165,
                        "src": "12063:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 6399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12063:41:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12051:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12031:74:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 6404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6402,
                        "name": "anyParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6393,
                        "src": "12119:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6403,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5924,
                        "src": "12132:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "12119:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6406,
                          "name": "anyParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6393,
                          "src": "12160:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6407,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5930,
                          "src": "12171:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6408,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6357,
                          "src": "12183:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6409,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6359,
                          "src": "12191:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6410,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6362,
                          "src": "12198:4:9",
                          "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": 6405,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6482,
                        "src": "12149:10:9",
                        "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": 6411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12149:54:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12119:84:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6416,
                  "nodeType": "IfStatement",
                  "src": "12115:126:9",
                  "trueBody": {
                    "id": 6415,
                    "nodeType": "Block",
                    "src": "12205:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12226:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6366,
                        "id": 6414,
                        "nodeType": "Return",
                        "src": "12219:11:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 6417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12258:5:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 6366,
                  "id": 6418,
                  "nodeType": "Return",
                  "src": "12251:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 6420,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6355,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11718:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11718:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6357,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11732:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11732:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6359,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11748:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6358,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11748:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6362,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11763:21:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6360,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11763:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6361,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11763:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11717:68:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6365,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11807:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6364,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11807:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11806:6:9"
            },
            "scope": 7166,
            "src": "11695:575:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6448,
              "nodeType": "Block",
              "src": "12371:116:9",
              "statements": [
                {
                  "assignments": [
                    6434
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6434,
                      "name": "empty",
                      "nodeType": "VariableDeclaration",
                      "scope": 6449,
                      "src": "12381:22:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 6432,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12381:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6433,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12381:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6440,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12420:1:9",
                        "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": 6437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "12406:13:9",
                      "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": 6435,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12410:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6436,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12410:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 6439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12406:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12381:41:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6442,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6422,
                        "src": "12453:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6443,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6424,
                        "src": "12459:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6444,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6426,
                        "src": "12467:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6445,
                        "name": "empty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6434,
                        "src": "12474:5:9",
                        "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": 6441,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6353,
                        6420,
                        6449
                      ],
                      "referencedDeclaration": 6420,
                      "src": "12439:13:9",
                      "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": 6446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12439:41:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6430,
                  "id": 6447,
                  "nodeType": "Return",
                  "src": "12432:48:9"
                }
              ]
            },
            "documentation": null,
            "id": 6449,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6422,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6449,
                  "src": "12299:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6421,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12299:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6424,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6449,
                  "src": "12313:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6423,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12313:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6426,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6449,
                  "src": "12329:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6425,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12329:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12298:45:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6429,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6449,
                  "src": "12365:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6428,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12365:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12364:6:9"
            },
            "scope": 7166,
            "src": "12276:211:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6481,
              "nodeType": "Block",
              "src": "12672:160:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 6467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6465,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6451,
                      "src": "12686:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6466,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5919,
                      "src": "12701:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12686:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6471,
                  "nodeType": "IfStatement",
                  "src": "12682:73:9",
                  "trueBody": {
                    "id": 6470,
                    "nodeType": "Block",
                    "src": "12719:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12740:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6464,
                        "id": 6469,
                        "nodeType": "Return",
                        "src": "12733:11:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6473,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6451,
                        "src": "12783:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12796:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 6475,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6453,
                        "src": "12799:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6476,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6455,
                        "src": "12805:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6477,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6457,
                        "src": "12813:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6478,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6460,
                        "src": "12820:4:9",
                        "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": 6472,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6801,
                      "src": "12772:10:9",
                      "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": 6479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12772:53:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6464,
                  "id": 6480,
                  "nodeType": "Return",
                  "src": "12765:60:9"
                }
              ]
            },
            "documentation": null,
            "id": 6482,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "evalParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6451,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12522:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6450,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12522:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6453,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12551:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12551:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6455,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12573:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12573:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6457,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12597:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6456,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12597:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6460,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12620:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6458,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12620:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6459,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12620:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12512:128:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6463,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12662:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6462,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12662:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12661:6:9"
            },
            "scope": 7166,
            "src": "12493:339:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6506,
              "nodeType": "Block",
              "src": "13038:125:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6494,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6484,
                        "src": "13063:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6495,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6486,
                        "src": "13072:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6496,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6488,
                        "src": "13078:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6497,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5919,
                        "src": "13085:16:9",
                        "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": 6493,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6560,
                      "src": "13048:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 6498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13048:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6499,
                  "nodeType": "ExpressionStatement",
                  "src": "13048:54:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6501,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6490,
                        "src": "13134:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6502,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6486,
                        "src": "13144:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6503,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6488,
                        "src": "13150:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6500,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "13112:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13112:44:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6505,
                  "nodeType": "ExpressionStatement",
                  "src": "13112:44:9"
                }
              ]
            },
            "documentation": "@dev Internal createPermission for access inside the kernel (on instantiation)",
            "id": 6507,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6484,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6507,
                  "src": "12965:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6483,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12965:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6486,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6507,
                  "src": "12982:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6485,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12982:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6488,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6507,
                  "src": "12996:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6487,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12996:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6490,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 6507,
                  "src": "13011:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6489,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13011:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12964:64:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6492,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13038:0:9"
            },
            "scope": 7166,
            "src": "12938:225:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6559,
              "nodeType": "Block",
              "src": "13352:426:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6518,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5951,
                        "src": "13362:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                          "typeString": "mapping(bytes32 => bytes32)"
                        }
                      },
                      "id": 6524,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6520,
                            "name": "_entity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6509,
                            "src": "13389:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6521,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6511,
                            "src": "13398:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6522,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6513,
                            "src": "13404:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 6519,
                          "name": "permissionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7165,
                          "src": "13374:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 6523,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13374:36:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13362:49:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6525,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6515,
                      "src": "13414:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13362:63:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 6527,
                  "nodeType": "ExpressionStatement",
                  "src": "13362:63:9"
                },
                {
                  "assignments": [
                    6529
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6529,
                      "name": "entityHasPermission",
                      "nodeType": "VariableDeclaration",
                      "scope": 6560,
                      "src": "13435:24:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6528,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13435:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6533,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 6532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6530,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6515,
                      "src": "13462:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6531,
                      "name": "NO_PERMISSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5924,
                      "src": "13477:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13462:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13435:55:9"
                },
                {
                  "assignments": [
                    6535
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6535,
                      "name": "permissionHasParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 6560,
                      "src": "13500:24:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6534,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13500:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6541,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6536,
                      "name": "entityHasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6529,
                      "src": "13527:19:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 6539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6537,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6515,
                        "src": "13550:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6538,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5919,
                        "src": "13565:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "13550:31:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13527:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13500:81:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6543,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6509,
                        "src": "13611:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6544,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6511,
                        "src": "13620:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6545,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6513,
                        "src": "13626:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6546,
                        "name": "entityHasPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6529,
                        "src": "13633:19:9",
                        "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": 6542,
                      "name": "SetPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5970,
                      "src": "13597:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bytes32,bool)"
                      }
                    },
                    "id": 6547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13597:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6548,
                  "nodeType": "EmitStatement",
                  "src": "13592:61:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 6549,
                    "name": "permissionHasParams",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6535,
                    "src": "13667:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6558,
                  "nodeType": "IfStatement",
                  "src": "13663:109:9",
                  "trueBody": {
                    "id": 6557,
                    "nodeType": "Block",
                    "src": "13688:84:9",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6551,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6509,
                              "src": "13727:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6552,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6511,
                              "src": "13736:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6553,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6513,
                              "src": "13742:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6554,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6515,
                              "src": "13749:11:9",
                              "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": 6550,
                            "name": "SetPermissionParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5980,
                            "src": "13707:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,bytes32,bytes32)"
                            }
                          },
                          "id": 6555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13707:54:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6556,
                        "nodeType": "EmitStatement",
                        "src": "13702:59:9"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Internal function called to actually save the permission",
            "id": 6560,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6509,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6560,
                  "src": "13276:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13276:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6511,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6560,
                  "src": "13293:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6510,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13293:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6513,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6560,
                  "src": "13307:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6512,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13307:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6515,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 6560,
                  "src": "13322:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6514,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13322:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13275:67:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6517,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13352:0:9"
            },
            "scope": 7166,
            "src": "13252:526:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6632,
              "nodeType": "Block",
              "src": "13858:540:9",
              "statements": [
                {
                  "assignments": [
                    6569
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6569,
                      "name": "paramHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 6633,
                      "src": "13868:17:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6568,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13868:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6576,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6573,
                            "name": "_encodedParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6563,
                            "src": "13915:14:9",
                            "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": 6571,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12657,
                            "src": "13898:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 6572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13898:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 6574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13898:32:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6570,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12664,
                      "src": "13888:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 6575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13888:43:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13868:63:9"
                },
                {
                  "assignments": [
                    6580
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6580,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 6633,
                      "src": "13941:22:9",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                        "typeString": "struct ACL.Param[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 6578,
                          "name": "Param",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5901,
                          "src": "13941:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                            "typeString": "struct ACL.Param"
                          }
                        },
                        "id": 6579,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "13941:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6584,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6581,
                      "name": "permissionParams",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5956,
                      "src": "13966:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                      }
                    },
                    "id": 6583,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6582,
                      "name": "paramHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6569,
                      "src": "13983:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13966:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                      "typeString": "struct ACL.Param storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13941:52:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6585,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6580,
                        "src": "14008:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param storage ref[] storage pointer"
                        }
                      },
                      "id": 6586,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14008:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14025:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14008:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6629,
                  "nodeType": "IfStatement",
                  "src": "14004:361:9",
                  "trueBody": {
                    "id": 6628,
                    "nodeType": "Block",
                    "src": "14028:337:9",
                    "statements": [
                      {
                        "body": {
                          "id": 6626,
                          "nodeType": "Block",
                          "src": "14121:234:9",
                          "statements": [
                            {
                              "assignments": [
                                6601
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6601,
                                  "name": "encodedParam",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6633,
                                  "src": "14139:20:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6600,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14139:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6605,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 6602,
                                  "name": "_encodedParams",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6563,
                                  "src": "14162:14:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 6604,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 6603,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6590,
                                  "src": "14177:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "14162:17:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14139:40:9"
                            },
                            {
                              "assignments": [
                                6607
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6607,
                                  "name": "param",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6633,
                                  "src": "14197:18:9",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                    "typeString": "struct ACL.Param"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 6606,
                                    "name": "Param",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 5901,
                                    "src": "14197:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                                      "typeString": "struct ACL.Param"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6619,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6610,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6601,
                                        "src": "14238:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6609,
                                      "name": "decodeParamId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7619,
                                      "src": "14224:13:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 6611,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14224:27:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6613,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6601,
                                        "src": "14267:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6612,
                                      "name": "decodeParamOp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7602,
                                      "src": "14253:13:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 6614,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14253:27:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6616,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6601,
                                        "src": "14290:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6615,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "14282:7:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint240_$",
                                        "typeString": "type(uint240)"
                                      },
                                      "typeName": "uint240"
                                    },
                                    "id": 6617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14282:21:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 6608,
                                  "name": "Param",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5901,
                                  "src": "14218:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Param_$5901_storage_ptr_$",
                                    "typeString": "type(struct ACL.Param storage pointer)"
                                  }
                                },
                                "id": 6618,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14218:86:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$5901_memory",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14197:107:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6623,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6607,
                                    "src": "14334:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6620,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6580,
                                    "src": "14322:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                                      "typeString": "struct ACL.Param storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 6622,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "14322:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Param_$5901_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct ACL.Param storage ref) returns (uint256)"
                                  }
                                },
                                "id": 6624,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14322:18:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6625,
                              "nodeType": "ExpressionStatement",
                              "src": "14322:18:9"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6593,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6590,
                            "src": "14089:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6594,
                              "name": "_encodedParams",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6563,
                              "src": "14093:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 6595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14093:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14089:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6627,
                        "initializationExpression": {
                          "assignments": [
                            6590
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 6590,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 6633,
                              "src": "14074:9:9",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 6589,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "14074:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 6592,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6591,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14086:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "14074:13:9"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 6598,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "14116:3:9",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 6597,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6590,
                              "src": "14116:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6599,
                          "nodeType": "ExpressionStatement",
                          "src": "14116:3:9"
                        },
                        "nodeType": "ForStatement",
                        "src": "14069:286:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6630,
                    "name": "paramHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6569,
                    "src": "14382:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 6567,
                  "id": 6631,
                  "nodeType": "Return",
                  "src": "14375:16:9"
                }
              ]
            },
            "documentation": null,
            "id": 6633,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_saveParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6563,
                  "name": "_encodedParams",
                  "nodeType": "VariableDeclaration",
                  "scope": 6633,
                  "src": "13805:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6561,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13805:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6562,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13805:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13804:26:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6566,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6633,
                  "src": "13849:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6565,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13849:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13848:9:9"
            },
            "scope": 7166,
            "src": "13784:614:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6800,
              "nodeType": "Block",
              "src": "14610:1208:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6651,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6637,
                      "src": "14624:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6652,
                          "name": "permissionParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5956,
                          "src": "14636:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                          }
                        },
                        "id": 6654,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 6653,
                          "name": "_paramsHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6635,
                          "src": "14653:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14636:29:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                          "typeString": "struct ACL.Param storage ref[] storage ref"
                        }
                      },
                      "id": 6655,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14636:36:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14624:48:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6660,
                  "nodeType": "IfStatement",
                  "src": "14620:108:9",
                  "trueBody": {
                    "id": 6659,
                    "nodeType": "Block",
                    "src": "14674:54:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 6657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14695:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 6650,
                        "id": 6658,
                        "nodeType": "Return",
                        "src": "14688:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6662
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6662,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 6801,
                      "src": "14738:18:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 6661,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5901,
                        "src": "14738:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6668,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6663,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5956,
                        "src": "14759:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 6665,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6664,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6635,
                        "src": "14776:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14759:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 6667,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6666,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6637,
                      "src": "14789:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14759:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$5901_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14738:60:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 6672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6669,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6662,
                        "src": "14813:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 6670,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5896,
                      "src": "14813:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6671,
                      "name": "LOGIC_OP_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5913,
                      "src": "14825:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14813:29:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6683,
                  "nodeType": "IfStatement",
                  "src": "14809:124:9",
                  "trueBody": {
                    "id": 6682,
                    "nodeType": "Block",
                    "src": "14844:89:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6674,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6662,
                              "src": "14876:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6675,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6635,
                              "src": "14883:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6676,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6639,
                              "src": "14896:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6677,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6641,
                              "src": "14902:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6678,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6643,
                              "src": "14910:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6679,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6646,
                              "src": "14917:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Param_$5901_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": 6673,
                            "name": "_evalLogic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6966,
                            "src": "14865:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Param_$5901_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": 6680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14865:57:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6650,
                        "id": 6681,
                        "nodeType": "Return",
                        "src": "14858:64:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6685,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 6801,
                      "src": "14943:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6684,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14943:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6686,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14943:13:9"
                },
                {
                  "assignments": [
                    6688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6688,
                      "name": "comparedTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 6801,
                      "src": "14966:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6687,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14966:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6693,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6690,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6662,
                          "src": "14995:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 6691,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5900,
                        "src": "14995:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      ],
                      "id": 6689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14987:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 6692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14987:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14966:41:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 6697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6694,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6662,
                        "src": "15043:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 6695,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5896,
                      "src": "15043:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6696,
                      "name": "ORACLE_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5910,
                      "src": "15055:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "15043:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 6722,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6719,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6662,
                          "src": "15214:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 6720,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5896,
                        "src": "15214:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6721,
                        "name": "BLOCK_NUMBER_PARAM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5904,
                        "src": "15226:21:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "15214:33:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 6732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6729,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6662,
                            "src": "15308:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6730,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5896,
                          "src": "15308:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6731,
                          "name": "TIMESTAMP_PARAM_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5907,
                          "src": "15320:18:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "15308:30:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 6742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6739,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6662,
                              "src": "15397:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 6740,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5896,
                            "src": "15397:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6741,
                            "name": "PARAM_VALUE_PARAM_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5916,
                            "src": "15409:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15397:32:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6771,
                          "nodeType": "Block",
                          "src": "15490:176:9",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6751,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6662,
                                    "src": "15508:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  },
                                  "id": 6752,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5896,
                                  "src": "15508:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6753,
                                    "name": "_how",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6646,
                                    "src": "15520:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 6754,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "15520:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15508:23:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 6759,
                              "nodeType": "IfStatement",
                              "src": "15504:74:9",
                              "trueBody": {
                                "id": 6758,
                                "nodeType": "Block",
                                "src": "15533:45:9",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "hexValue": "66616c7365",
                                      "id": 6756,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "15558:5:9",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    "functionReturnParameters": 6650,
                                    "id": 6757,
                                    "nodeType": "Return",
                                    "src": "15551:12:9"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6760,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6685,
                                  "src": "15591:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 6763,
                                            "name": "_how",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6646,
                                            "src": "15615:4:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 6766,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 6764,
                                              "name": "param",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6662,
                                              "src": "15620:5:9",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                                "typeString": "struct ACL.Param memory"
                                              }
                                            },
                                            "id": 6765,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "id",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5896,
                                            "src": "15620:8:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "15615:14:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 6762,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15607:7:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint240_$",
                                          "typeString": "type(uint240)"
                                        },
                                        "typeName": "uint240"
                                      },
                                      "id": 6767,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15607:23:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 6761,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15599:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 6768,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15599:32:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15591:40:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6770,
                              "nodeType": "ExpressionStatement",
                              "src": "15591:40:9"
                            }
                          ]
                        },
                        "id": 6772,
                        "nodeType": "IfStatement",
                        "src": "15393:273:9",
                        "trueBody": {
                          "id": 6750,
                          "nodeType": "Block",
                          "src": "15431:53:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6743,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6685,
                                  "src": "15445:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6745,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6662,
                                        "src": "15461:5:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 6746,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 5900,
                                      "src": "15461:11:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 6744,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15453:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 6747,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15453:20:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15445:28:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6749,
                              "nodeType": "ExpressionStatement",
                              "src": "15445:28:9"
                            }
                          ]
                        }
                      },
                      "id": 6773,
                      "nodeType": "IfStatement",
                      "src": "15304:362:9",
                      "trueBody": {
                        "id": 6738,
                        "nodeType": "Block",
                        "src": "15340:47:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6733,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6685,
                                "src": "15354:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 6734,
                                  "name": "getTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8857,
                                  "src": "15362:12:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 6735,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15362:14:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15354:22:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6737,
                            "nodeType": "ExpressionStatement",
                            "src": "15354:22:9"
                          }
                        ]
                      }
                    },
                    "id": 6774,
                    "nodeType": "IfStatement",
                    "src": "15210:456:9",
                    "trueBody": {
                      "id": 6728,
                      "nodeType": "Block",
                      "src": "15249:49:9",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 6726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 6723,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6685,
                              "src": "15263:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 6724,
                                "name": "getBlockNumber",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8837,
                                "src": "15271:14:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 6725,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15271:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15263:24:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6727,
                          "nodeType": "ExpressionStatement",
                          "src": "15263:24:9"
                        }
                      ]
                    }
                  },
                  "id": 6775,
                  "nodeType": "IfStatement",
                  "src": "15039:627:9",
                  "trueBody": {
                    "id": 6718,
                    "nodeType": "Block",
                    "src": "15072:132:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6698,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6685,
                            "src": "15086:5:9",
                            "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": 6701,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6662,
                                        "src": "15117:5:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 6702,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 5900,
                                      "src": "15117:11:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 6700,
                                    "name": "IACLOracle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7698,
                                    "src": "15106:10:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IACLOracle_$7698_$",
                                      "typeString": "type(contract IACLOracle)"
                                    }
                                  },
                                  "id": 6703,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15106:23:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IACLOracle_$7698",
                                    "typeString": "contract IACLOracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6704,
                                  "name": "_who",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6639,
                                  "src": "15131:4:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6705,
                                  "name": "_where",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6641,
                                  "src": "15137:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6706,
                                  "name": "_what",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6643,
                                  "src": "15145:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6707,
                                  "name": "_how",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6646,
                                  "src": "15152:4:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IACLOracle_$7698",
                                    "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": 6699,
                                "name": "checkOracle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7099,
                                "src": "15094:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_contract$_IACLOracle_$7698_$_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": 6708,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15094:63:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6710,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15164:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 6711,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "15094:71:9",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 6709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15160:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15086:79:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6713,
                        "nodeType": "ExpressionStatement",
                        "src": "15086:79:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6714,
                            "name": "comparedTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6688,
                            "src": "15179:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 6715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15192:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "15179:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6717,
                        "nodeType": "ExpressionStatement",
                        "src": "15179:14:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6777,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6662,
                            "src": "15683:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6778,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5898,
                          "src": "15683:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 6776,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "15680:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6779,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15680:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6780,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "15696:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6781,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "RET",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15696:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15680:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6790,
                  "nodeType": "IfStatement",
                  "src": "15676:78:9",
                  "trueBody": {
                    "id": 6789,
                    "nodeType": "Block",
                    "src": "15704:50:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6784,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6685,
                                "src": "15733:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 6783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15725:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 6785,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15725:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15742:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15725:18:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6650,
                        "id": 6788,
                        "nodeType": "Return",
                        "src": "15718:25:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6792,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6685,
                        "src": "15779:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6794,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6662,
                              "src": "15789:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 6795,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5898,
                            "src": "15789:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 6793,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "15786:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6796,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15786:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6797,
                        "name": "comparedTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6688,
                        "src": "15800:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6791,
                      "name": "compare",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7034,
                      "src": "15771:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_Op_$5894_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256,enum ACL.Op,uint256) pure returns (bool)"
                      }
                    },
                    "id": 6798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15771:40:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6650,
                  "id": 6799,
                  "nodeType": "Return",
                  "src": "15764:47:9"
                }
              ]
            },
            "documentation": null,
            "id": 6801,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6635,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14433:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6634,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14433:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6637,
                  "name": "_paramId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14462:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 6636,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14462:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6639,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14487:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6638,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14487:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6641,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14509:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6640,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14509:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6643,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14533:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6642,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14533:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6646,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14556:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6644,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14556:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6645,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "14556:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14423:153:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6650,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6649,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14600:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6648,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14600:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14599:6:9"
            },
            "scope": 7166,
            "src": "14404:1414:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6965,
              "nodeType": "Block",
              "src": "15997:1131:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6820,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6803,
                            "src": "16014:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6821,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5898,
                          "src": "16014:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 6819,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16011:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16011:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6823,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16028:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6824,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "IF_ELSE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16028:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16011:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6871,
                  "nodeType": "IfStatement",
                  "src": "16007:450:9",
                  "trueBody": {
                    "id": 6870,
                    "nodeType": "Block",
                    "src": "16040:417:9",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6827,
                            "name": "conditionParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 6966,
                            "src": "16054:21:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 6826,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "16054:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6828,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16054:21:9"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6830,
                            "name": "successParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 6966,
                            "src": "16089:19:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 6829,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "16089:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6831,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16089:19:9"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6833,
                            "name": "failureParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 6966,
                            "src": "16122:19:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 6832,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "16122:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6834,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16122:19:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6845,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 6835,
                                "name": "conditionParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6827,
                                "src": "16157:14:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6836,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6830,
                                "src": "16173:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6837,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6833,
                                "src": "16187:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "id": 6838,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "16156:44:9",
                            "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": 6841,
                                      "name": "_param",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6803,
                                      "src": "16228:6:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                        "typeString": "struct ACL.Param memory"
                                      }
                                    },
                                    "id": 6842,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5900,
                                    "src": "16228:12:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 6840,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16220:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 6843,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16220:21:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 6839,
                              "name": "decodeParamsList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7659,
                              "src": "16203:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                                "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                              }
                            },
                            "id": 6844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16203:39:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "src": "16156:86:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6846,
                        "nodeType": "ExpressionStatement",
                        "src": "16156:86:9"
                      },
                      {
                        "assignments": [
                          6848
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6848,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 6966,
                            "src": "16256:11:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6847,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "16256:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6857,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6850,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6805,
                              "src": "16281:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6851,
                              "name": "conditionParam",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6827,
                              "src": "16294:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6852,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6807,
                              "src": "16310:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6853,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6809,
                              "src": "16316:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6854,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6811,
                              "src": "16324:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6855,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6814,
                              "src": "16331:4:9",
                              "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": 6849,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6801,
                            "src": "16270:10:9",
                            "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": 6856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16270:66:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16256:80:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6859,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6805,
                              "src": "16369:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "id": 6860,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6848,
                                "src": "16382:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 6862,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6833,
                                "src": "16406:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 6863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "16382:36:9",
                              "trueExpression": {
                                "argumentTypes": null,
                                "id": 6861,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6830,
                                "src": "16391:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6864,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6807,
                              "src": "16420:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6865,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6809,
                              "src": "16426:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6866,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6811,
                              "src": "16434:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6867,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6814,
                              "src": "16441:4:9",
                              "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": 6858,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6801,
                            "src": "16358:10:9",
                            "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": 6868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16358:88:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6818,
                        "id": 6869,
                        "nodeType": "Return",
                        "src": "16351:95:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6873,
                      "name": "param1",
                      "nodeType": "VariableDeclaration",
                      "scope": 6966,
                      "src": "16467:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 6872,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16467:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6874,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16467:13:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6876,
                      "name": "param2",
                      "nodeType": "VariableDeclaration",
                      "scope": 6966,
                      "src": "16490:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 6875,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16490:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6877,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16490:13:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 6878,
                          "name": "param1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6873,
                          "src": "16515:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6879,
                          "name": "param2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6876,
                          "src": "16523:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        null
                      ],
                      "id": 6880,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "16514:17:9",
                      "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": 6883,
                                "name": "_param",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6803,
                                "src": "16559:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "id": 6884,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5900,
                              "src": "16559:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            ],
                            "id": 6882,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16551:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 6885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16551:21:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 6881,
                        "name": "decodeParamsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7659,
                        "src": "16534:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                          "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                        }
                      },
                      "id": 6886,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16534:39:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32,uint32)"
                      }
                    },
                    "src": "16514:59:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6888,
                  "nodeType": "ExpressionStatement",
                  "src": "16514:59:9"
                },
                {
                  "assignments": [
                    6890
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6890,
                      "name": "r1",
                      "nodeType": "VariableDeclaration",
                      "scope": 6966,
                      "src": "16583:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6889,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16583:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6899,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6892,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6805,
                        "src": "16604:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6893,
                        "name": "param1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6873,
                        "src": "16617:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6894,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6807,
                        "src": "16625:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6895,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6809,
                        "src": "16631:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6896,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6811,
                        "src": "16639:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6897,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6814,
                        "src": "16646:4:9",
                        "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": 6891,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6801,
                      "src": "16593:10:9",
                      "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": 6898,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16593:58:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16583:68:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6901,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6803,
                            "src": "16669:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6902,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5898,
                          "src": "16669:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 6900,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16666:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16666:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6904,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16683:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NOT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16683:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16666:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6911,
                  "nodeType": "IfStatement",
                  "src": "16662:64:9",
                  "trueBody": {
                    "id": 6910,
                    "nodeType": "Block",
                    "src": "16691:35:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "16712:3:9",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 6907,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6890,
                            "src": "16713:2:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6818,
                        "id": 6909,
                        "nodeType": "Return",
                        "src": "16705:10:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6912,
                      "name": "r1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6890,
                      "src": "16740:2:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 6919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6914,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6803,
                              "src": "16749:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 6915,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5898,
                            "src": "16749:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 6913,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "16746:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16746:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6917,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "16763:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "OR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16763:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16746:22:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16740:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6924,
                  "nodeType": "IfStatement",
                  "src": "16736:70:9",
                  "trueBody": {
                    "id": 6923,
                    "nodeType": "Block",
                    "src": "16770:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16791:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6818,
                        "id": 6922,
                        "nodeType": "Return",
                        "src": "16784:11:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6926,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "16820:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6925,
                        "name": "r1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6890,
                        "src": "16821:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 6933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6928,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6803,
                              "src": "16830:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 6929,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5898,
                            "src": "16830:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 6927,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "16827:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6930,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16827:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6931,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "16844:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "AND",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16844:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16827:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16820:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6938,
                  "nodeType": "IfStatement",
                  "src": "16816:73:9",
                  "trueBody": {
                    "id": 6937,
                    "nodeType": "Block",
                    "src": "16852:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 6935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16873:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 6818,
                        "id": 6936,
                        "nodeType": "Return",
                        "src": "16866:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6940
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6940,
                      "name": "r2",
                      "nodeType": "VariableDeclaration",
                      "scope": 6966,
                      "src": "16899:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6939,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16899:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6949,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6942,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6805,
                        "src": "16920:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6943,
                        "name": "param2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6876,
                        "src": "16933:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6944,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6807,
                        "src": "16941:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6945,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6809,
                        "src": "16947:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6946,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6811,
                        "src": "16955:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6947,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6814,
                        "src": "16962:4:9",
                        "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": 6941,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6801,
                      "src": "16909:10:9",
                      "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": 6948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16909:58:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16899:68:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6951,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6803,
                            "src": "16985:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6952,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5898,
                          "src": "16985:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 6950,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16982:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6953,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16982:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6954,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16999:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XOR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16999:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16982:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6962,
                  "nodeType": "IfStatement",
                  "src": "16978:69:9",
                  "trueBody": {
                    "id": 6961,
                    "nodeType": "Block",
                    "src": "17007:40:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 6959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6957,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6890,
                            "src": "17028:2:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6958,
                            "name": "r2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6940,
                            "src": "17034:2:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "17028:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6818,
                        "id": 6960,
                        "nodeType": "Return",
                        "src": "17021:15:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6963,
                    "name": "r2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6940,
                    "src": "17064:2:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6818,
                  "id": 6964,
                  "nodeType": "Return",
                  "src": "17057:9:9"
                }
              ]
            },
            "documentation": null,
            "id": 6966,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalLogic",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6815,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6803,
                  "name": "_param",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15844:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                    "typeString": "struct ACL.Param"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 6802,
                    "name": "Param",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5901,
                    "src": "15844:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                      "typeString": "struct ACL.Param"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6805,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15858:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6804,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15858:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6807,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15879:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6806,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15879:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6809,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15893:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6808,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15893:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6811,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15909:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6810,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15909:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6814,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15924:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6812,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15924:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6813,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15924:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15843:96:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6818,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6817,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15987:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6816,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15987:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15986:6:9"
            },
            "scope": 7166,
            "src": "15824:1304:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7033,
              "nodeType": "Block",
              "src": "17212:647:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6977,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17226:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6978,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17233:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "EQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17233:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17226:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6985,
                  "nodeType": "IfStatement",
                  "src": "17222:34:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6981,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17248:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6982,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17254:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17248:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 6984,
                    "nodeType": "Return",
                    "src": "17241:15:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6989,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6986,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17329:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6987,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17336:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NEQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17336:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17329:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6994,
                  "nodeType": "IfStatement",
                  "src": "17325:34:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6990,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17351:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6991,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17357:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17351:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 6993,
                    "nodeType": "Return",
                    "src": "17344:15:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6995,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17432:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6996,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17439:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17439:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17432:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7003,
                  "nodeType": "IfStatement",
                  "src": "17428:33:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6999,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17454:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7000,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17459:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17454:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 7002,
                    "nodeType": "Return",
                    "src": "17447:14:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 7007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7004,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17535:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7005,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17542:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 7006,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17542:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17535:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7012,
                  "nodeType": "IfStatement",
                  "src": "17531:33:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7010,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7008,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17557:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7009,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17562:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17557:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 7011,
                    "nodeType": "Return",
                    "src": "17550:14:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 7016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7013,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17638:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7014,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17645:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 7015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17645:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17638:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7021,
                  "nodeType": "IfStatement",
                  "src": "17634:34:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7017,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17660:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7018,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17666:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17660:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 7020,
                    "nodeType": "Return",
                    "src": "17653:15:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 7025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7022,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17741:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7023,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17748:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 7024,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17748:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17741:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7030,
                  "nodeType": "IfStatement",
                  "src": "17737:34:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7028,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7026,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17763:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7027,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17769:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17763:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 7029,
                    "nodeType": "Return",
                    "src": "17756:15:9"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 7031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17847:5:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 6976,
                  "id": 7032,
                  "nodeType": "Return",
                  "src": "17840:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 7034,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6968,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 7034,
                  "src": "17151:10:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6967,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17151:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6970,
                  "name": "_op",
                  "nodeType": "VariableDeclaration",
                  "scope": 7034,
                  "src": "17163:6:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Op_$5894",
                    "typeString": "enum ACL.Op"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 6969,
                    "name": "Op",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5894,
                    "src": "17163:2:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6972,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 7034,
                  "src": "17171:10:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17171:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17150:32:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6975,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7034,
                  "src": "17206:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6974,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17206:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17205:6:9"
            },
            "scope": 7166,
            "src": "17134:725:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7098,
              "nodeType": "Block",
              "src": "18000:1057:9",
              "statements": [
                {
                  "assignments": [
                    7051
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7051,
                      "name": "sig",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18010:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 7050,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "18010:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7055,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7052,
                        "name": "_oracleAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7036,
                        "src": "18023:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACLOracle_$7698",
                          "typeString": "contract IACLOracle"
                        }
                      },
                      "id": 7053,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "canPerform",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7697,
                      "src": "18023:22:9",
                      "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": 7054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "18023:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18010:44:9"
                },
                {
                  "assignments": [
                    7057
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7057,
                      "name": "checkCalldata",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18165:26:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 7056,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "18165:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7066,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7060,
                        "name": "sig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7051,
                        "src": "18217:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7061,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7038,
                        "src": "18222:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7062,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7040,
                        "src": "18228:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7063,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7042,
                        "src": "18236:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7064,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7045,
                        "src": "18243:4:9",
                        "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": 7058,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12657,
                        "src": "18194:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 7059,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "18194:22:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes4) pure returns (bytes memory)"
                      }
                    },
                    "id": 7065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18194:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18165:83:9"
                },
                {
                  "assignments": [
                    7068
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7068,
                      "name": "oracleCheckGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18258:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7067,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18258:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7070,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 7069,
                    "name": "ORACLE_CHECK_GAS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5938,
                    "src": "18283:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18258:41:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7072,
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18310:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7071,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18310:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7073,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18310:7:9"
                },
                {
                  "externalReferences": [
                    {
                      "checkCalldata": {
                        "declaration": 7057,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18400:13:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "checkCalldata": {
                        "declaration": 7057,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18428:13:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ok": {
                        "declaration": 7072,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18350:2:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "oracleCheckGas": {
                        "declaration": 7068,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18367:14:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "_oracleAddr": {
                        "declaration": 7036,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18383:11:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7074,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ok := staticcall(oracleCheckGas, _oracleAddr, add(checkCalldata, 0x20), mload(checkCalldata), 0, 0)\n}",
                  "src": "18327:144:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 7076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18473:3:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 7075,
                      "name": "ok",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7072,
                      "src": "18474:2:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7080,
                  "nodeType": "IfStatement",
                  "src": "18469:46:9",
                  "trueBody": {
                    "id": 7079,
                    "nodeType": "Block",
                    "src": "18478:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 7077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18499:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 7049,
                        "id": 7078,
                        "nodeType": "Return",
                        "src": "18492:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7082,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18525:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7081,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18525:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7083,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18525:12:9"
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 7082,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18558:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7084,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    size := returndatasize()\n}",
                  "src": "18547:46:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7085,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7082,
                      "src": "18595:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 7086,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18603:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "18595:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7091,
                  "nodeType": "IfStatement",
                  "src": "18591:53:9",
                  "trueBody": {
                    "id": 7090,
                    "nodeType": "Block",
                    "src": "18607:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 7088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18628:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 7049,
                        "id": 7089,
                        "nodeType": "Return",
                        "src": "18621:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7093,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18654:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7092,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18654:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7094,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18654:11:9"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 7093,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18847:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 7082,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18790:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7095,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    returndatacopy(ptr, 0, size)\n    result := mload(ptr)\n    mstore(ptr, 0)\n}",
                  "src": "18675:368:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7096,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7093,
                    "src": "19044:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7049,
                  "id": 7097,
                  "nodeType": "Return",
                  "src": "19037:13:9"
                }
              ]
            },
            "documentation": null,
            "id": 7099,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7036,
                  "name": "_oracleAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17886:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IACLOracle_$7698",
                    "typeString": "contract IACLOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7035,
                    "name": "IACLOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7698,
                    "src": "17886:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IACLOracle_$7698",
                      "typeString": "contract IACLOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7038,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17910:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7037,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17910:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7040,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17924:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7039,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17924:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7042,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17940:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7041,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "17940:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7045,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17955:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7043,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17955:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7044,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "17955:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17885:85:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 7049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7048,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17994:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7047,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17994:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17993:6:9"
            },
            "scope": 7166,
            "src": "17865:1192:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7123,
              "nodeType": "Block",
              "src": "19218:135:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7108,
                        "name": "permissionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5960,
                        "src": "19228:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 7113,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7110,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7103,
                            "src": "19255:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7111,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7105,
                            "src": "19261:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 7109,
                          "name": "roleHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7143,
                          "src": "19246:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 7112,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19246:21:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "19228:40:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7114,
                      "name": "_newManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7101,
                      "src": "19271:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19228:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7116,
                  "nodeType": "ExpressionStatement",
                  "src": "19228:54:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7118,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7103,
                        "src": "19321:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7119,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7105,
                        "src": "19327:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7120,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7101,
                        "src": "19334:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7117,
                      "name": "ChangePermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5988,
                      "src": "19297:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,bytes32,address)"
                      }
                    },
                    "id": 7121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19297:49:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7122,
                  "nodeType": "EmitStatement",
                  "src": "19292:54:9"
                }
              ]
            },
            "documentation": "@dev Internal function that sets management",
            "id": 7124,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7101,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 7124,
                  "src": "19159:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19159:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7103,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 7124,
                  "src": "19180:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19180:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7105,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 7124,
                  "src": "19194:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7104,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19194:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19158:50:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 7107,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19218:0:9"
            },
            "scope": 7166,
            "src": "19128:225:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7142,
              "nodeType": "Block",
              "src": "19440:74:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "524f4c45",
                            "id": 7136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19484:6:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            "value": "ROLE"
                          },
                          {
                            "argumentTypes": null,
                            "id": 7137,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7126,
                            "src": "19492:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7138,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7128,
                            "src": "19500:5:9",
                            "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": 7134,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12657,
                            "src": "19467:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 7135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19467:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 7139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19467:39:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 7133,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12664,
                      "src": "19457:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 7140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19457:50:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 7132,
                  "id": 7141,
                  "nodeType": "Return",
                  "src": "19450:57:9"
                }
              ]
            },
            "documentation": null,
            "id": 7143,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "roleHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7129,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7126,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 7143,
                  "src": "19377:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7125,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19377:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7128,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 7143,
                  "src": "19393:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7127,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19393:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19376:31:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 7132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7131,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7143,
                  "src": "19431:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7130,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19431:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19430:9:9"
            },
            "scope": 7166,
            "src": "19359:155:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7164,
              "nodeType": "Block",
              "src": "19621:86:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "5045524d495353494f4e",
                            "id": 7157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19665:12:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            "value": "PERMISSION"
                          },
                          {
                            "argumentTypes": null,
                            "id": 7158,
                            "name": "_who",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7145,
                            "src": "19679:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7159,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7147,
                            "src": "19685:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7160,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7149,
                            "src": "19693:5:9",
                            "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": 7155,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12657,
                            "src": "19648:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 7156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19648:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 7161,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19648:51:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 7154,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12664,
                      "src": "19638:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 7162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19638:62:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 7153,
                  "id": 7163,
                  "nodeType": "Return",
                  "src": "19631:69:9"
                }
              ]
            },
            "documentation": null,
            "id": 7165,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "permissionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7145,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 7165,
                  "src": "19544:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7144,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19544:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7147,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 7165,
                  "src": "19558:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7146,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19558:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7149,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 7165,
                  "src": "19574:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7148,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19574:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19543:45:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 7153,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7152,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7165,
                  "src": "19612:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7151,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19612:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19611:9:9"
            },
            "scope": 7166,
            "src": "19520:187:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 7167,
        "src": "251:19458:9"
      }
    ],
    "src": "0:19710:9"
  },
  "legacyAST": {
    "absolutePath": "@aragon/os/contracts/acl/ACL.sol",
    "exportedSymbols": {
      "ACL": [
        7166
      ]
    },
    "id": 7167,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5864,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "../apps/AragonApp.sol",
        "id": 5865,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 8476,
        "src": "25:31:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/TimeHelpers.sol",
        "file": "../common/TimeHelpers.sol",
        "id": 5866,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 8870,
        "src": "57:35:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/ACLSyntaxSugar.sol",
        "file": "./ACLSyntaxSugar.sol",
        "id": 5867,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 7661,
        "src": "93:30:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACL.sol",
        "file": "./IACL.sol",
        "id": 5868,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 7682,
        "src": "124:20:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/acl/IACLOracle.sol",
        "file": "./IACLOracle.sol",
        "id": 5869,
        "nodeType": "ImportDirective",
        "scope": 7167,
        "sourceUnit": 7699,
        "src": "145:26:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5870,
              "name": "IACL",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7681,
              "src": "267:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IACL_$7681",
                "typeString": "contract IACL"
              }
            },
            "id": 5871,
            "nodeType": "InheritanceSpecifier",
            "src": "267:4:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5872,
              "name": "TimeHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8869,
              "src": "273:11:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeHelpers_$8869",
                "typeString": "contract TimeHelpers"
              }
            },
            "id": 5873,
            "nodeType": "InheritanceSpecifier",
            "src": "273:11:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5874,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8475,
              "src": "286:9:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$8475",
                "typeString": "contract AragonApp"
              }
            },
            "id": 5875,
            "nodeType": "InheritanceSpecifier",
            "src": "286:9:9"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5876,
              "name": "ACLHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7660,
              "src": "297:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ACLHelpers_$7660",
                "typeString": "contract ACLHelpers"
              }
            },
            "id": 5877,
            "nodeType": "InheritanceSpecifier",
            "src": "297:10:9"
          }
        ],
        "contractDependencies": [
          7585,
          7660,
          7681,
          8347,
          8475,
          8488,
          8621,
          8663,
          8761,
          8789,
          8822,
          8869,
          9066,
          9476,
          9503,
          10769
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 7166,
        "linearizedBaseContracts": [
          7166,
          7660,
          8475,
          7585,
          9476,
          10769,
          9503,
          9066,
          8789,
          8621,
          8663,
          8488,
          8822,
          8761,
          8869,
          8347,
          7681
        ],
        "name": "ACL",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 5880,
            "name": "CREATE_PERMISSIONS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "452:116:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 5878,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "452:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307830623731396233336338336238653564333030633532316362386235346165396264393333393936613134626566386332663465303238356432643234303061",
              "id": 5879,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "502:66:9",
              "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": 5894,
            "members": [
              {
                "id": 5881,
                "name": "NONE",
                "nodeType": "EnumValue",
                "src": "585:4:9"
              },
              {
                "id": 5882,
                "name": "EQ",
                "nodeType": "EnumValue",
                "src": "591:2:9"
              },
              {
                "id": 5883,
                "name": "NEQ",
                "nodeType": "EnumValue",
                "src": "595:3:9"
              },
              {
                "id": 5884,
                "name": "GT",
                "nodeType": "EnumValue",
                "src": "600:2:9"
              },
              {
                "id": 5885,
                "name": "LT",
                "nodeType": "EnumValue",
                "src": "604:2:9"
              },
              {
                "id": 5886,
                "name": "GTE",
                "nodeType": "EnumValue",
                "src": "608:3:9"
              },
              {
                "id": 5887,
                "name": "LTE",
                "nodeType": "EnumValue",
                "src": "613:3:9"
              },
              {
                "id": 5888,
                "name": "RET",
                "nodeType": "EnumValue",
                "src": "618:3:9"
              },
              {
                "id": 5889,
                "name": "NOT",
                "nodeType": "EnumValue",
                "src": "623:3:9"
              },
              {
                "id": 5890,
                "name": "AND",
                "nodeType": "EnumValue",
                "src": "628:3:9"
              },
              {
                "id": 5891,
                "name": "OR",
                "nodeType": "EnumValue",
                "src": "633:2:9"
              },
              {
                "id": 5892,
                "name": "XOR",
                "nodeType": "EnumValue",
                "src": "637:3:9"
              },
              {
                "id": 5893,
                "name": "IF_ELSE",
                "nodeType": "EnumValue",
                "src": "642:7:9"
              }
            ],
            "name": "Op",
            "nodeType": "EnumDefinition",
            "src": "575:76:9"
          },
          {
            "canonicalName": "ACL.Param",
            "id": 5901,
            "members": [
              {
                "constant": false,
                "id": 5896,
                "name": "id",
                "nodeType": "VariableDeclaration",
                "scope": 5901,
                "src": "692:8:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 5895,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "692:5:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 5898,
                "name": "op",
                "nodeType": "VariableDeclaration",
                "scope": 5901,
                "src": "710:8:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 5897,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "710:5:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 5900,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 5901,
                "src": "728:13:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint240",
                  "typeString": "uint240"
                },
                "typeName": {
                  "id": 5899,
                  "name": "uint240",
                  "nodeType": "ElementaryTypeName",
                  "src": "728:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Param",
            "nodeType": "StructDefinition",
            "scope": 7166,
            "src": "669:299:9",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5904,
            "name": "BLOCK_NUMBER_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "974:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5902,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "974:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323030",
              "id": 5903,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1022:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_200_by_1",
                "typeString": "int_const 200"
              },
              "value": "200"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5907,
            "name": "TIMESTAMP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1031:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5905,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1031:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323031",
              "id": 5906,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1079:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_201_by_1",
                "typeString": "int_const 201"
              },
              "value": "201"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5910,
            "name": "ORACLE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1109:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5908,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1109:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323033",
              "id": 5909,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1157:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_203_by_1",
                "typeString": "int_const 203"
              },
              "value": "203"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5913,
            "name": "LOGIC_OP_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1166:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5911,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1166:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323034",
              "id": 5912,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1214:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_204_by_1",
                "typeString": "int_const 204"
              },
              "value": "204"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5916,
            "name": "PARAM_VALUE_PARAM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1223:51:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 5914,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1223:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "323035",
              "id": 5915,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1271:3:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_205_by_1",
                "typeString": "int_const 205"
              },
              "value": "205"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5919,
            "name": "EMPTY_PARAM_HASH",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1441:109:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 5917,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1441:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307832393064656364393534386236326138643630333435613938383338366663383462613662633935343834303038663633363266393331363065663365353633",
              "id": 5918,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1484:66:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18569430475105882587588266137607568536673111973893317399460219858819262702947_by_1",
                "typeString": "int_const 1856...(69 digits omitted)...2947"
              },
              "value": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5924,
            "name": "NO_PERMISSION",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1556:50:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 5920,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1556:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "30",
                  "id": 5922,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1604:1:9",
                  "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": 5921,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1596:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": "bytes32"
              },
              "id": 5923,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1596:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5930,
            "name": "ANY_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1612:48:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 5925,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1612:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 5928,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1657:2:9",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 5927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1658:1:9",
                    "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": 5926,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1649:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 5929,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1649:11:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5935,
            "name": "BURN_ENTITY",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1666:48:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 5931,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1666:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 5933,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1712:1:9",
                  "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": 5932,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1704:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": "address"
              },
              "id": 5934,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1704:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 5938,
            "name": "ORACLE_CHECK_GAS",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1778:50:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5936,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1778:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3330303030",
              "id": 5937,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1823:5:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_30000_by_1",
                "typeString": "int_const 30000"
              },
              "value": "30000"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5941,
            "name": "ERROR_AUTH_INIT_KERNEL",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1835:71:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 5939,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1835:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f494e49545f4b45524e454c",
              "id": 5940,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1884:22:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b821e30579b9561be7f0b7b902ba336b331e39831108d09772a61766a2b465fb",
                "typeString": "literal_string \"ACL_AUTH_INIT_KERNEL\""
              },
              "value": "ACL_AUTH_INIT_KERNEL"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 5944,
            "name": "ERROR_AUTH_NO_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1912:69:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 5942,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1912:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f415554485f4e4f5f4d414e41474552",
              "id": 5943,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1960:21:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e2d6e781abad74150d786cba50506e9dd4199308c8c71d28e79e0e9232faf41e",
                "typeString": "literal_string \"ACL_AUTH_NO_MANAGER\""
              },
              "value": "ACL_AUTH_NO_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 5947,
            "name": "ERROR_EXISTENT_MANAGER",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "1987:71:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 5945,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1987:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "41434c5f4558495354454e545f4d414e41474552",
              "id": 5946,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2036:22:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4c0d68e0b4f86bab649749fdab1e22b7429153357a2704a5fd7b646a35ecc4d0",
                "typeString": "literal_string \"ACL_EXISTENT_MANAGER\""
              },
              "value": "ACL_EXISTENT_MANAGER"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5951,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "2105:49:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
              "typeString": "mapping(bytes32 => bytes32)"
            },
            "typeName": {
              "id": 5950,
              "keyType": {
                "id": 5948,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2114:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2105:28:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                "typeString": "mapping(bytes32 => bytes32)"
              },
              "valueType": {
                "id": 5949,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2125:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5956,
            "name": "permissionParams",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "2195:54:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
              "typeString": "mapping(bytes32 => struct ACL.Param[])"
            },
            "typeName": {
              "id": 5955,
              "keyType": {
                "id": 5952,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2204:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2195:28:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                "typeString": "mapping(bytes32 => struct ACL.Param[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 5953,
                  "name": "Param",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5901,
                  "src": "2215:5:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                    "typeString": "struct ACL.Param"
                  }
                },
                "id": 5954,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2215:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                  "typeString": "struct ACL.Param[]"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5960,
            "name": "permissionManager",
            "nodeType": "VariableDeclaration",
            "scope": 7166,
            "src": "2323:55:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 5959,
              "keyType": {
                "id": 5957,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2332:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2323:28:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 5958,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2343:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5970,
            "name": "SetPermission",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5962,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5970,
                  "src": "2405:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5961,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2405:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5964,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 5970,
                  "src": "2429:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5963,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2429:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5966,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 5970,
                  "src": "2450:20:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5965,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2450:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5968,
                  "indexed": false,
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 5970,
                  "src": "2472:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5967,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2472:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2404:81:9"
            },
            "src": "2385:101:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5980,
            "name": "SetPermissionParams",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5972,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5980,
                  "src": "2517:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5971,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2517:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5974,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 5980,
                  "src": "2541:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2541:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5976,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 5980,
                  "src": "2562:20:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2562:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5978,
                  "indexed": false,
                  "name": "paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 5980,
                  "src": "2584:18:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5977,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2584:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2516:87:9"
            },
            "src": "2491:113:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5988,
            "name": "ChangePermissionManager",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5982,
                  "indexed": true,
                  "name": "app",
                  "nodeType": "VariableDeclaration",
                  "scope": 5988,
                  "src": "2639:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2639:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5984,
                  "indexed": true,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 5988,
                  "src": "2660:20:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5983,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2660:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5986,
                  "indexed": true,
                  "name": "manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 5988,
                  "src": "2682:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5985,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2682:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2638:68:9"
            },
            "src": "2609:98:9"
          },
          {
            "body": {
              "id": 6006,
              "nodeType": "Block",
              "src": "2773:107:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5995,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "2791:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 5996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2791:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5998,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5990,
                              "src": "2826:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5999,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5992,
                              "src": "2832:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 5997,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6319,
                            "src": "2805:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 6000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2805:33:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2791:47:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6002,
                        "name": "ERROR_AUTH_NO_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5944,
                        "src": "2840:21:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 5994,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "2783:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2783:79:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6004,
                  "nodeType": "ExpressionStatement",
                  "src": "2783:79:9"
                },
                {
                  "id": 6005,
                  "nodeType": "PlaceholderStatement",
                  "src": "2872:1:9"
                }
              ]
            },
            "documentation": null,
            "id": 6007,
            "name": "onlyPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 5993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5990,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6007,
                  "src": "2744:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5989,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2744:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5992,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6007,
                  "src": "2758:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5991,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2758:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2743:29:9"
            },
            "src": "2713:167:9",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6026,
              "nodeType": "Block",
              "src": "2944:192:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6015,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6009,
                              "src": "3067:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6016,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6011,
                              "src": "3073:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 6014,
                            "name": "getPermissionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6319,
                            "src": "3046:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (address,bytes32) view returns (address)"
                            }
                          },
                          "id": 6017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3046:33:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3091:1:9",
                              "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": 6018,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3083:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3083:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3046:47:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6022,
                        "name": "ERROR_EXISTENT_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5947,
                        "src": "3095:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 6013,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "3038:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3038:80:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6024,
                  "nodeType": "ExpressionStatement",
                  "src": "3038:80:9"
                },
                {
                  "id": 6025,
                  "nodeType": "PlaceholderStatement",
                  "src": "3128:1:9"
                }
              ]
            },
            "documentation": null,
            "id": 6027,
            "name": "noPermissionManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6009,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6027,
                  "src": "2915:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6008,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2915:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6011,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6027,
                  "src": "2929:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6010,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2929:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2914:29:9"
            },
            "src": "2886:250:9",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6055,
              "nodeType": "Block",
              "src": "3535:205:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6034,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8746,
                      "src": "3545:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3545:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6036,
                  "nodeType": "ExpressionStatement",
                  "src": "3545:13:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6038,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "3576:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3576:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 6041,
                                "name": "kernel",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8310,
                                "src": "3598:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IKernel_$10248_$",
                                  "typeString": "function () view returns (contract IKernel)"
                                }
                              },
                              "id": 6042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3598:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKernel_$10248",
                                "typeString": "contract IKernel"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IKernel_$10248",
                                "typeString": "contract IKernel"
                              }
                            ],
                            "id": 6040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3590:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3590:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3576:31:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6045,
                        "name": "ERROR_AUTH_INIT_KERNEL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5941,
                        "src": "3609:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 6037,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "3568:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3568:64:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6047,
                  "nodeType": "ExpressionStatement",
                  "src": "3568:64:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6049,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6029,
                        "src": "3661:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6050,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12761,
                        "src": "3682:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$7166",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6051,
                        "name": "CREATE_PERMISSIONS_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5880,
                        "src": "3688:23:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6052,
                        "name": "_permissionsCreator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6029,
                        "src": "3713:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$7166",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6048,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6507,
                      "src": "3643:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 6053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3643:90:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6054,
                  "nodeType": "ExpressionStatement",
                  "src": "3643:90:9"
                }
              ]
            },
            "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": 6056,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 6032,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6031,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8693,
                  "src": "3526:8:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3526:8:9"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6029,
                  "name": "_permissionsCreator",
                  "nodeType": "VariableDeclaration",
                  "scope": 6056,
                  "src": "3490:27:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6028,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3490:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3489:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6033,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3535:0:9"
            },
            "scope": 7166,
            "src": "3470:270:9",
            "stateMutability": "nonpayable",
            "superFunction": 7667,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6081,
              "nodeType": "Block",
              "src": "5002:66:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6075,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6058,
                        "src": "5030:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6076,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6060,
                        "src": "5039:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6077,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6062,
                        "src": "5045:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6078,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6064,
                        "src": "5052:8:9",
                        "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": 6074,
                      "name": "_createPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6507,
                      "src": "5012:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address)"
                      }
                    },
                    "id": 6079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5012:49:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6080,
                  "nodeType": "ExpressionStatement",
                  "src": "5012:49:9"
                }
              ]
            },
            "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": 6082,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6067,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5880,
                    "src": "4932:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6068,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6066,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8387,
                  "src": "4927:4:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4927:29:9"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6070,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6060,
                    "src": "4985:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6071,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6062,
                    "src": "4991:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6072,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6069,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6027,
                  "src": "4965:19:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4965:32:9"
              }
            ],
            "name": "createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6058,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "4838:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6057,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4838:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6060,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "4855:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4855:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6062,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "4869:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6061,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4869:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6064,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "4884:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6063,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4884:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4837:64:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6073,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5002:0:9"
            },
            "scope": 7166,
            "src": "4812:256:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6102,
              "nodeType": "Block",
              "src": "5660:73:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6092,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "5687:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6093,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6086,
                        "src": "5696:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6094,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6088,
                        "src": "5702:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6098,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5723:1:9",
                            "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": 6097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "5709:13:9",
                          "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": 6095,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5713:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6096,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "5713:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 6099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5709:16:9",
                        "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": 6091,
                      "name": "grantPermissionP",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6139,
                      "src": "5670:16:9",
                      "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": 6100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5670:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6101,
                  "nodeType": "ExpressionStatement",
                  "src": "5670:56:9"
                }
              ]
            },
            "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": 6103,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "grantPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6084,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6103,
                  "src": "5593:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6083,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5593:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6086,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6103,
                  "src": "5610:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6085,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5610:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6088,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6103,
                  "src": "5624:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6087,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5624:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5592:46:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6090,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5660:0:9"
            },
            "scope": 7166,
            "src": "5568:165:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6138,
              "nodeType": "Block",
              "src": "6447:156:9",
              "statements": [
                {
                  "assignments": [
                    6120
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6120,
                      "name": "paramsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 6139,
                      "src": "6457:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6119,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6457:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6130,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6124,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6121,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6112,
                          "src": "6478:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 6122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6478:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6495:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6478:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 6128,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5919,
                      "src": "6522:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 6129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6478:60:9",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6126,
                          "name": "_params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6112,
                          "src": "6511:7:9",
                          "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": 6125,
                        "name": "_saveParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6633,
                        "src": "6499:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint256[] memory) returns (bytes32)"
                        }
                      },
                      "id": 6127,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6499:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6457:81:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6132,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6105,
                        "src": "6563:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6133,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6107,
                        "src": "6572:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6134,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6109,
                        "src": "6578:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6135,
                        "name": "paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6120,
                        "src": "6585:10:9",
                        "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": 6131,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6560,
                      "src": "6548:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 6136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6548:48:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6137,
                  "nodeType": "ExpressionStatement",
                  "src": "6548:48:9"
                }
              ]
            },
            "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": 6139,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6115,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6107,
                    "src": "6430:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6116,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6109,
                    "src": "6436:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6117,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6114,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "6408:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6408:34:9"
              }
            ],
            "name": "grantPermissionP",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6105,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6139,
                  "src": "6320:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6104,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6320:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6107,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6139,
                  "src": "6337:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6106,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6337:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6109,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6139,
                  "src": "6351:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6108,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6351:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6112,
                  "name": "_params",
                  "nodeType": "VariableDeclaration",
                  "scope": 6139,
                  "src": "6366:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6110,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6366:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6111,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6366:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6319:65:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6447:0:9"
            },
            "scope": 7166,
            "src": "6294:309:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6159,
              "nodeType": "Block",
              "src": "7181:68:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6153,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6141,
                        "src": "7206:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6154,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6143,
                        "src": "7215:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6155,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6145,
                        "src": "7221:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6156,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5924,
                        "src": "7228:13:9",
                        "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": 6152,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6560,
                      "src": "7191:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 6157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7191:51:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6158,
                  "nodeType": "ExpressionStatement",
                  "src": "7191:51:9"
                }
              ]
            },
            "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": 6160,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6148,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6143,
                    "src": "7164:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6149,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6145,
                    "src": "7170:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6150,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6147,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "7142:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7142:34:9"
              }
            ],
            "name": "revokePermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6146,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6141,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6160,
                  "src": "7071:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6140,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7071:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6143,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6160,
                  "src": "7088:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6142,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7088:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6145,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6160,
                  "src": "7102:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6144,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7102:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7070:46:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6151,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7181:0:9"
            },
            "scope": 7166,
            "src": "7045:204:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6179,
              "nodeType": "Block",
              "src": "7701:64:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6174,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6162,
                        "src": "7733:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6175,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6164,
                        "src": "7746:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6176,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6166,
                        "src": "7752:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6173,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "7711:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7711:47:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6178,
                  "nodeType": "ExpressionStatement",
                  "src": "7711:47:9"
                }
              ]
            },
            "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": 6180,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6169,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6164,
                    "src": "7684:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6170,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6166,
                    "src": "7690:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6171,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6168,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "7662:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7662:34:9"
              }
            ],
            "name": "setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6162,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 6180,
                  "src": "7587:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7587:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6164,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6180,
                  "src": "7608:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6163,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7608:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6166,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6180,
                  "src": "7622:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6165,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7622:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7586:50:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6172,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7701:0:9"
            },
            "scope": 7166,
            "src": "7557:208:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6199,
              "nodeType": "Block",
              "src": "8117:63:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6193,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8157:1:9",
                            "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": 6192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8149:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8149:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6195,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6182,
                        "src": "8161:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6196,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6184,
                        "src": "8167:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6191,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "8127:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8127:46:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6198,
                  "nodeType": "ExpressionStatement",
                  "src": "8127:46:9"
                }
              ]
            },
            "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": 6200,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6187,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6182,
                    "src": "8100:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6188,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6184,
                    "src": "8106:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6189,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6186,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "8078:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8078:34:9"
              }
            ],
            "name": "removePermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6182,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6200,
                  "src": "8024:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6181,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8024:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6184,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6200,
                  "src": "8038:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6183,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8038:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8023:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6190,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8117:0:9"
            },
            "scope": 7166,
            "src": "7991:189:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6220,
              "nodeType": "Block",
              "src": "8631:64:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6215,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5935,
                        "src": "8663:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6216,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "8676:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6217,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6204,
                        "src": "8682:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6214,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "8641:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8641:47:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6219,
                  "nodeType": "ExpressionStatement",
                  "src": "8641:47:9"
                }
              ]
            },
            "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": 6221,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6207,
                    "name": "CREATE_PERMISSIONS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5880,
                    "src": "8561:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6208,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6206,
                  "name": "auth",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8387,
                  "src": "8556:4:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8556:29:9"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6210,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6202,
                    "src": "8614:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6211,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6204,
                    "src": "8620:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6212,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6209,
                  "name": "noPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6027,
                  "src": "8594:19:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8594:32:9"
              }
            ],
            "name": "createBurnedPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6205,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6202,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6221,
                  "src": "8502:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6201,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8502:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6204,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6221,
                  "src": "8516:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6203,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8516:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8501:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8631:0:9"
            },
            "scope": 7166,
            "src": "8470:225:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6238,
              "nodeType": "Block",
              "src": "9096:64:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6233,
                        "name": "BURN_ENTITY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5935,
                        "src": "9128:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6234,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6223,
                        "src": "9141:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6235,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6225,
                        "src": "9147:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6232,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "9106:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9106:47:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6237,
                  "nodeType": "ExpressionStatement",
                  "src": "9106:47:9"
                }
              ]
            },
            "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": 6239,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 6228,
                    "name": "_app",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6223,
                    "src": "9079:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 6229,
                    "name": "_role",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6225,
                    "src": "9085:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 6230,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6227,
                  "name": "onlyPermissionManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6007,
                  "src": "9057:21:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_bytes32_$",
                    "typeString": "modifier (address,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9057:34:9"
              }
            ],
            "name": "burnPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6223,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6239,
                  "src": "9003:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6222,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9003:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6225,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6239,
                  "src": "9017:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6224,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9017:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9002:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9096:0:9"
            },
            "scope": 7166,
            "src": "8972:188:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6261,
              "nodeType": "Block",
              "src": "9578:98:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6250,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5956,
                        "src": "9595:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 6258,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6251,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5951,
                          "src": "9612:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 6257,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6253,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6241,
                              "src": "9639:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6254,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6243,
                              "src": "9648:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6255,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6245,
                              "src": "9654:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 6252,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7165,
                            "src": "9624:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 6256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9624:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9612:49:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9595:67:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 6259,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9595:74:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6249,
                  "id": 6260,
                  "nodeType": "Return",
                  "src": "9588:81:9"
                }
              ]
            },
            "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": 6262,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParamsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6241,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6262,
                  "src": "9503:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9503:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6243,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6262,
                  "src": "9520:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9520:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6245,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6262,
                  "src": "9534:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6244,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9534:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9502:46:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6248,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6262,
                  "src": "9572:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6247,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9572:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9571:6:9"
            },
            "scope": 7166,
            "src": "9468:208:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6301,
              "nodeType": "Block",
              "src": "10183:164:9",
              "statements": [
                {
                  "assignments": [
                    6280
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6280,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 6302,
                      "src": "10193:19:9",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 6279,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5901,
                        "src": "10193:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6292,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6281,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5956,
                        "src": "10215:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 6289,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6282,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5951,
                          "src": "10232:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                            "typeString": "mapping(bytes32 => bytes32)"
                          }
                        },
                        "id": 6288,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6284,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6264,
                              "src": "10259:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6285,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6266,
                              "src": "10268:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6286,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6268,
                              "src": "10274:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 6283,
                            "name": "permissionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7165,
                            "src": "10244:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 6287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10244:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10232:49:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10215:67:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 6291,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6290,
                      "name": "_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6270,
                      "src": "10283:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10215:75:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$5901_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10193:97:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6293,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6280,
                          "src": "10308:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 6294,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5896,
                        "src": "10308:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6295,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6280,
                          "src": "10318:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 6296,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "op",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5898,
                        "src": "10318:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6297,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6280,
                          "src": "10328:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                            "typeString": "struct ACL.Param storage pointer"
                          }
                        },
                        "id": 6298,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5900,
                        "src": "10328:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "id": 6299,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "10307:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_uint8_$_t_uint240_$",
                      "typeString": "tuple(uint8,uint8,uint240)"
                    }
                  },
                  "functionReturnParameters": 6278,
                  "id": 6300,
                  "nodeType": "Return",
                  "src": "10300:40:9"
                }
              ]
            },
            "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": 6302,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6264,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10050:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10050:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6266,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10067:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6265,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10067:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6268,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10081:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6267,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10081:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6270,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10096:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6269,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10096:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10049:59:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6278,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6273,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10156:5:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 6272,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10156:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6275,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10163:5:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 6274,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10163:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6277,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6302,
                  "src": "10170:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint240",
                    "typeString": "uint240"
                  },
                  "typeName": {
                    "id": 6276,
                    "name": "uint240",
                    "nodeType": "ElementaryTypeName",
                    "src": "10170:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint240",
                      "typeString": "uint240"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10155:23:9"
            },
            "scope": 7166,
            "src": "10022:325:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6318,
              "nodeType": "Block",
              "src": "10648:64:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6311,
                      "name": "permissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5960,
                      "src": "10665:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 6316,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6313,
                          "name": "_app",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6304,
                          "src": "10692:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6314,
                          "name": "_role",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6306,
                          "src": "10698:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6312,
                        "name": "roleHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7143,
                        "src": "10683:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 6315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10683:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10665:40:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6310,
                  "id": 6317,
                  "nodeType": "Return",
                  "src": "10658:47:9"
                }
              ]
            },
            "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": 6319,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6304,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6319,
                  "src": "10589:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6303,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10589:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6306,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6319,
                  "src": "10603:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6305,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10603:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10588:29:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6309,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6319,
                  "src": "10639:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6308,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10639:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10638:9:9"
            },
            "scope": 7166,
            "src": "10559:153:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6352,
              "nodeType": "Block",
              "src": "11192:497:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6335,
                      "name": "how",
                      "nodeType": "VariableDeclaration",
                      "scope": 6353,
                      "src": "11469:20:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 6333,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11469:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6334,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "11469:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6336,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11469:20:9"
                },
                {
                  "assignments": [
                    6338
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6338,
                      "name": "intsLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 6353,
                      "src": "11499:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6337,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11499:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6343,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6339,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6327,
                        "src": "11520:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 6340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11520:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 6341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11534:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "11520:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11499:37:9"
                },
                {
                  "externalReferences": [
                    {
                      "_how": {
                        "declaration": 6327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11576:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "how": {
                        "declaration": 6335,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11569:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "how": {
                        "declaration": 6335,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11600:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "intsLength": {
                        "declaration": 6338,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11605:10:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 6344,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    how := _how\n    mstore(how, intsLength)\n}",
                  "src": "11546:96:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6346,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6321,
                        "src": "11657:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6347,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6323,
                        "src": "11663:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6348,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6325,
                        "src": "11671:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6349,
                        "name": "how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6335,
                        "src": "11678:3:9",
                        "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": 6345,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6353,
                        6420,
                        6449
                      ],
                      "referencedDeclaration": 6420,
                      "src": "11643:13:9",
                      "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": 6350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11643:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6331,
                  "id": 6351,
                  "nodeType": "Return",
                  "src": "11636:46:9"
                }
              ]
            },
            "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": 6353,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6321,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11101:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6320,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11101:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6323,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11115:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6322,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11115:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6325,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11131:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6324,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11131:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6327,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11146:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6326,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11146:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11100:64:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6330,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6353,
                  "src": "11186:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6329,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11186:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11185:6:9"
            },
            "scope": 7166,
            "src": "11078:611:9",
            "stateMutability": "view",
            "superFunction": 7680,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6419,
              "nodeType": "Block",
              "src": "11813:457:9",
              "statements": [
                {
                  "assignments": [
                    6368
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6368,
                      "name": "whoParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 6420,
                      "src": "11823:17:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6367,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11823:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6376,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6369,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5951,
                      "src": "11843:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 6375,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6371,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6355,
                          "src": "11870:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6372,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6357,
                          "src": "11876:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6373,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6359,
                          "src": "11884:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6370,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7165,
                        "src": "11855:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 6374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11855:35:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11843:48:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11823:68:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 6379,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6377,
                        "name": "whoParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6368,
                        "src": "11905:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6378,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5924,
                        "src": "11918:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "11905:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6381,
                          "name": "whoParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6368,
                          "src": "11946:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6382,
                          "name": "_who",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6355,
                          "src": "11957:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6383,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6357,
                          "src": "11963:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6384,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6359,
                          "src": "11971:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6385,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6362,
                          "src": "11978:4:9",
                          "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": 6380,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6482,
                        "src": "11935:10:9",
                        "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": 6386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11935:48:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11905:78:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6391,
                  "nodeType": "IfStatement",
                  "src": "11901:120:9",
                  "trueBody": {
                    "id": 6390,
                    "nodeType": "Block",
                    "src": "11985:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12006:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6366,
                        "id": 6389,
                        "nodeType": "Return",
                        "src": "11999:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6393
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6393,
                      "name": "anyParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 6420,
                      "src": "12031:17:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6392,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12031:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6401,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6394,
                      "name": "permissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5951,
                      "src": "12051:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                        "typeString": "mapping(bytes32 => bytes32)"
                      }
                    },
                    "id": 6400,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6396,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5930,
                          "src": "12078:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6397,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6357,
                          "src": "12090:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6398,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6359,
                          "src": "12098:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6395,
                        "name": "permissionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7165,
                        "src": "12063:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 6399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12063:41:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12051:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12031:74:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 6404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6402,
                        "name": "anyParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6393,
                        "src": "12119:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6403,
                        "name": "NO_PERMISSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5924,
                        "src": "12132:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "12119:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6406,
                          "name": "anyParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6393,
                          "src": "12160:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6407,
                          "name": "ANY_ENTITY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5930,
                          "src": "12171:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6408,
                          "name": "_where",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6357,
                          "src": "12183:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6409,
                          "name": "_what",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6359,
                          "src": "12191:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6410,
                          "name": "_how",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6362,
                          "src": "12198:4:9",
                          "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": 6405,
                        "name": "evalParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6482,
                        "src": "12149:10:9",
                        "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": 6411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12149:54:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12119:84:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6416,
                  "nodeType": "IfStatement",
                  "src": "12115:126:9",
                  "trueBody": {
                    "id": 6415,
                    "nodeType": "Block",
                    "src": "12205:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12226:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6366,
                        "id": 6414,
                        "nodeType": "Return",
                        "src": "12219:11:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 6417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12258:5:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 6366,
                  "id": 6418,
                  "nodeType": "Return",
                  "src": "12251:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 6420,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6355,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11718:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11718:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6357,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11732:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11732:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6359,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11748:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6358,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11748:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6362,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11763:21:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6360,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11763:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6361,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11763:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11717:68:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6365,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6420,
                  "src": "11807:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6364,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11807:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11806:6:9"
            },
            "scope": 7166,
            "src": "11695:575:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6448,
              "nodeType": "Block",
              "src": "12371:116:9",
              "statements": [
                {
                  "assignments": [
                    6434
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6434,
                      "name": "empty",
                      "nodeType": "VariableDeclaration",
                      "scope": 6449,
                      "src": "12381:22:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 6432,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12381:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6433,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12381:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6440,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12420:1:9",
                        "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": 6437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "12406:13:9",
                      "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": 6435,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12410:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6436,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12410:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 6439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12406:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12381:41:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6442,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6422,
                        "src": "12453:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6443,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6424,
                        "src": "12459:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6444,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6426,
                        "src": "12467:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6445,
                        "name": "empty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6434,
                        "src": "12474:5:9",
                        "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": 6441,
                      "name": "hasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6353,
                        6420,
                        6449
                      ],
                      "referencedDeclaration": 6420,
                      "src": "12439:13:9",
                      "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": 6446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12439:41:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6430,
                  "id": 6447,
                  "nodeType": "Return",
                  "src": "12432:48:9"
                }
              ]
            },
            "documentation": null,
            "id": 6449,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6422,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6449,
                  "src": "12299:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6421,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12299:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6424,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6449,
                  "src": "12313:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6423,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12313:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6426,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6449,
                  "src": "12329:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6425,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12329:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12298:45:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6429,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6449,
                  "src": "12365:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6428,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12365:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12364:6:9"
            },
            "scope": 7166,
            "src": "12276:211:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6481,
              "nodeType": "Block",
              "src": "12672:160:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 6467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6465,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6451,
                      "src": "12686:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6466,
                      "name": "EMPTY_PARAM_HASH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5919,
                      "src": "12701:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12686:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6471,
                  "nodeType": "IfStatement",
                  "src": "12682:73:9",
                  "trueBody": {
                    "id": 6470,
                    "nodeType": "Block",
                    "src": "12719:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12740:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6464,
                        "id": 6469,
                        "nodeType": "Return",
                        "src": "12733:11:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6473,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6451,
                        "src": "12783:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 6474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12796:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 6475,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6453,
                        "src": "12799:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6476,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6455,
                        "src": "12805:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6477,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6457,
                        "src": "12813:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6478,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6460,
                        "src": "12820:4:9",
                        "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": 6472,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6801,
                      "src": "12772:10:9",
                      "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": 6479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12772:53:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6464,
                  "id": 6480,
                  "nodeType": "Return",
                  "src": "12765:60:9"
                }
              ]
            },
            "documentation": null,
            "id": 6482,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "evalParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6451,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12522:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6450,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12522:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6453,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12551:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12551:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6455,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12573:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12573:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6457,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12597:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6456,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12597:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6460,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12620:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6458,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12620:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6459,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12620:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12512:128:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6463,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "12662:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6462,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12662:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12661:6:9"
            },
            "scope": 7166,
            "src": "12493:339:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6506,
              "nodeType": "Block",
              "src": "13038:125:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6494,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6484,
                        "src": "13063:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6495,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6486,
                        "src": "13072:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6496,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6488,
                        "src": "13078:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6497,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5919,
                        "src": "13085:16:9",
                        "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": 6493,
                      "name": "_setPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6560,
                      "src": "13048:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32,bytes32)"
                      }
                    },
                    "id": 6498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13048:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6499,
                  "nodeType": "ExpressionStatement",
                  "src": "13048:54:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6501,
                        "name": "_manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6490,
                        "src": "13134:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6502,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6486,
                        "src": "13144:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6503,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6488,
                        "src": "13150:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6500,
                      "name": "_setPermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7124,
                      "src": "13112:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32)"
                      }
                    },
                    "id": 6504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13112:44:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6505,
                  "nodeType": "ExpressionStatement",
                  "src": "13112:44:9"
                }
              ]
            },
            "documentation": "@dev Internal createPermission for access inside the kernel (on instantiation)",
            "id": 6507,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_createPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6484,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6507,
                  "src": "12965:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6483,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12965:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6486,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6507,
                  "src": "12982:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6485,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12982:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6488,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6507,
                  "src": "12996:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6487,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12996:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6490,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 6507,
                  "src": "13011:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6489,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13011:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12964:64:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6492,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13038:0:9"
            },
            "scope": 7166,
            "src": "12938:225:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6559,
              "nodeType": "Block",
              "src": "13352:426:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6518,
                        "name": "permissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5951,
                        "src": "13362:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                          "typeString": "mapping(bytes32 => bytes32)"
                        }
                      },
                      "id": 6524,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6520,
                            "name": "_entity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6509,
                            "src": "13389:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6521,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6511,
                            "src": "13398:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6522,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6513,
                            "src": "13404:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 6519,
                          "name": "permissionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7165,
                          "src": "13374:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 6523,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13374:36:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13362:49:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6525,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6515,
                      "src": "13414:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13362:63:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 6527,
                  "nodeType": "ExpressionStatement",
                  "src": "13362:63:9"
                },
                {
                  "assignments": [
                    6529
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6529,
                      "name": "entityHasPermission",
                      "nodeType": "VariableDeclaration",
                      "scope": 6560,
                      "src": "13435:24:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6528,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13435:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6533,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 6532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6530,
                      "name": "_paramsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6515,
                      "src": "13462:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6531,
                      "name": "NO_PERMISSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5924,
                      "src": "13477:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13462:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13435:55:9"
                },
                {
                  "assignments": [
                    6535
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6535,
                      "name": "permissionHasParams",
                      "nodeType": "VariableDeclaration",
                      "scope": 6560,
                      "src": "13500:24:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6534,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13500:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6541,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6536,
                      "name": "entityHasPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6529,
                      "src": "13527:19:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 6539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6537,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6515,
                        "src": "13550:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6538,
                        "name": "EMPTY_PARAM_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5919,
                        "src": "13565:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "13550:31:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13527:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13500:81:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6543,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6509,
                        "src": "13611:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6544,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6511,
                        "src": "13620:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6545,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6513,
                        "src": "13626:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6546,
                        "name": "entityHasPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6529,
                        "src": "13633:19:9",
                        "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": 6542,
                      "name": "SetPermission",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5970,
                      "src": "13597:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bytes32,bool)"
                      }
                    },
                    "id": 6547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13597:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6548,
                  "nodeType": "EmitStatement",
                  "src": "13592:61:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 6549,
                    "name": "permissionHasParams",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6535,
                    "src": "13667:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6558,
                  "nodeType": "IfStatement",
                  "src": "13663:109:9",
                  "trueBody": {
                    "id": 6557,
                    "nodeType": "Block",
                    "src": "13688:84:9",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6551,
                              "name": "_entity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6509,
                              "src": "13727:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6552,
                              "name": "_app",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6511,
                              "src": "13736:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6553,
                              "name": "_role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6513,
                              "src": "13742:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6554,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6515,
                              "src": "13749:11:9",
                              "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": 6550,
                            "name": "SetPermissionParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5980,
                            "src": "13707:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,bytes32,bytes32)"
                            }
                          },
                          "id": 6555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13707:54:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6556,
                        "nodeType": "EmitStatement",
                        "src": "13702:59:9"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Internal function called to actually save the permission",
            "id": 6560,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6509,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6560,
                  "src": "13276:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13276:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6511,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 6560,
                  "src": "13293:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6510,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13293:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6513,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 6560,
                  "src": "13307:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6512,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13307:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6515,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 6560,
                  "src": "13322:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6514,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13322:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13275:67:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6517,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13352:0:9"
            },
            "scope": 7166,
            "src": "13252:526:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6632,
              "nodeType": "Block",
              "src": "13858:540:9",
              "statements": [
                {
                  "assignments": [
                    6569
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6569,
                      "name": "paramHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 6633,
                      "src": "13868:17:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6568,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13868:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6576,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6573,
                            "name": "_encodedParams",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6563,
                            "src": "13915:14:9",
                            "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": 6571,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12657,
                            "src": "13898:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 6572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13898:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 6574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13898:32:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6570,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12664,
                      "src": "13888:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 6575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13888:43:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13868:63:9"
                },
                {
                  "assignments": [
                    6580
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6580,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 6633,
                      "src": "13941:22:9",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                        "typeString": "struct ACL.Param[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 6578,
                          "name": "Param",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5901,
                          "src": "13941:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                            "typeString": "struct ACL.Param"
                          }
                        },
                        "id": 6579,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "13941:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6584,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6581,
                      "name": "permissionParams",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5956,
                      "src": "13966:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                      }
                    },
                    "id": 6583,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6582,
                      "name": "paramHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6569,
                      "src": "13983:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13966:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                      "typeString": "struct ACL.Param storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13941:52:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6585,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6580,
                        "src": "14008:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                          "typeString": "struct ACL.Param storage ref[] storage pointer"
                        }
                      },
                      "id": 6586,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14008:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14025:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14008:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6629,
                  "nodeType": "IfStatement",
                  "src": "14004:361:9",
                  "trueBody": {
                    "id": 6628,
                    "nodeType": "Block",
                    "src": "14028:337:9",
                    "statements": [
                      {
                        "body": {
                          "id": 6626,
                          "nodeType": "Block",
                          "src": "14121:234:9",
                          "statements": [
                            {
                              "assignments": [
                                6601
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6601,
                                  "name": "encodedParam",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6633,
                                  "src": "14139:20:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6600,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14139:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6605,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 6602,
                                  "name": "_encodedParams",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6563,
                                  "src": "14162:14:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 6604,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 6603,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6590,
                                  "src": "14177:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "14162:17:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14139:40:9"
                            },
                            {
                              "assignments": [
                                6607
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6607,
                                  "name": "param",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6633,
                                  "src": "14197:18:9",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                    "typeString": "struct ACL.Param"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 6606,
                                    "name": "Param",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 5901,
                                    "src": "14197:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                                      "typeString": "struct ACL.Param"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6619,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6610,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6601,
                                        "src": "14238:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6609,
                                      "name": "decodeParamId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7619,
                                      "src": "14224:13:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 6611,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14224:27:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6613,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6601,
                                        "src": "14267:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6612,
                                      "name": "decodeParamOp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7602,
                                      "src": "14253:13:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                        "typeString": "function (uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 6614,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14253:27:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6616,
                                        "name": "encodedParam",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6601,
                                        "src": "14290:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6615,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "14282:7:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint240_$",
                                        "typeString": "type(uint240)"
                                      },
                                      "typeName": "uint240"
                                    },
                                    "id": 6617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14282:21:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 6608,
                                  "name": "Param",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5901,
                                  "src": "14218:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Param_$5901_storage_ptr_$",
                                    "typeString": "type(struct ACL.Param storage pointer)"
                                  }
                                },
                                "id": 6618,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14218:86:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$5901_memory",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14197:107:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6623,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6607,
                                    "src": "14334:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6620,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6580,
                                    "src": "14322:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage_ptr",
                                      "typeString": "struct ACL.Param storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 6622,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "14322:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Param_$5901_storage_$returns$_t_uint256_$",
                                    "typeString": "function (struct ACL.Param storage ref) returns (uint256)"
                                  }
                                },
                                "id": 6624,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14322:18:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6625,
                              "nodeType": "ExpressionStatement",
                              "src": "14322:18:9"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6593,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6590,
                            "src": "14089:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6594,
                              "name": "_encodedParams",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6563,
                              "src": "14093:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 6595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14093:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14089:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6627,
                        "initializationExpression": {
                          "assignments": [
                            6590
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 6590,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 6633,
                              "src": "14074:9:9",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 6589,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "14074:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 6592,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6591,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14086:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "14074:13:9"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 6598,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "14116:3:9",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 6597,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6590,
                              "src": "14116:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6599,
                          "nodeType": "ExpressionStatement",
                          "src": "14116:3:9"
                        },
                        "nodeType": "ForStatement",
                        "src": "14069:286:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6630,
                    "name": "paramHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6569,
                    "src": "14382:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 6567,
                  "id": 6631,
                  "nodeType": "Return",
                  "src": "14375:16:9"
                }
              ]
            },
            "documentation": null,
            "id": 6633,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_saveParams",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6563,
                  "name": "_encodedParams",
                  "nodeType": "VariableDeclaration",
                  "scope": 6633,
                  "src": "13805:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6561,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13805:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6562,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13805:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13804:26:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6566,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6633,
                  "src": "13849:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6565,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13849:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13848:9:9"
            },
            "scope": 7166,
            "src": "13784:614:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6800,
              "nodeType": "Block",
              "src": "14610:1208:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6651,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6637,
                      "src": "14624:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6652,
                          "name": "permissionParams",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5956,
                          "src": "14636:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                          }
                        },
                        "id": 6654,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 6653,
                          "name": "_paramsHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6635,
                          "src": "14653:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14636:29:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                          "typeString": "struct ACL.Param storage ref[] storage ref"
                        }
                      },
                      "id": 6655,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14636:36:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14624:48:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6660,
                  "nodeType": "IfStatement",
                  "src": "14620:108:9",
                  "trueBody": {
                    "id": 6659,
                    "nodeType": "Block",
                    "src": "14674:54:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 6657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14695:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 6650,
                        "id": 6658,
                        "nodeType": "Return",
                        "src": "14688:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6662
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6662,
                      "name": "param",
                      "nodeType": "VariableDeclaration",
                      "scope": 6801,
                      "src": "14738:18:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                        "typeString": "struct ACL.Param"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 6661,
                        "name": "Param",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5901,
                        "src": "14738:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                          "typeString": "struct ACL.Param"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6668,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6663,
                        "name": "permissionParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5956,
                        "src": "14759:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_Param_$5901_storage_$dyn_storage_$",
                          "typeString": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                        }
                      },
                      "id": 6665,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6664,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6635,
                        "src": "14776:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14759:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Param_$5901_storage_$dyn_storage",
                        "typeString": "struct ACL.Param storage ref[] storage ref"
                      }
                    },
                    "id": 6667,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6666,
                      "name": "_paramId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6637,
                      "src": "14789:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14759:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$5901_storage",
                      "typeString": "struct ACL.Param storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14738:60:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 6672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6669,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6662,
                        "src": "14813:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 6670,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5896,
                      "src": "14813:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6671,
                      "name": "LOGIC_OP_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5913,
                      "src": "14825:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "14813:29:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6683,
                  "nodeType": "IfStatement",
                  "src": "14809:124:9",
                  "trueBody": {
                    "id": 6682,
                    "nodeType": "Block",
                    "src": "14844:89:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6674,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6662,
                              "src": "14876:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6675,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6635,
                              "src": "14883:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6676,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6639,
                              "src": "14896:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6677,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6641,
                              "src": "14902:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6678,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6643,
                              "src": "14910:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6679,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6646,
                              "src": "14917:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Param_$5901_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": 6673,
                            "name": "_evalLogic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6966,
                            "src": "14865:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Param_$5901_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": 6680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14865:57:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6650,
                        "id": 6681,
                        "nodeType": "Return",
                        "src": "14858:64:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6685,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 6801,
                      "src": "14943:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6684,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14943:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6686,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14943:13:9"
                },
                {
                  "assignments": [
                    6688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6688,
                      "name": "comparedTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 6801,
                      "src": "14966:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6687,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14966:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6693,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6690,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6662,
                          "src": "14995:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 6691,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5900,
                        "src": "14995:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        }
                      ],
                      "id": 6689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14987:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 6692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14987:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14966:41:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 6697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6694,
                        "name": "param",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6662,
                        "src": "15043:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                          "typeString": "struct ACL.Param memory"
                        }
                      },
                      "id": 6695,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5896,
                      "src": "15043:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 6696,
                      "name": "ORACLE_PARAM_ID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5910,
                      "src": "15055:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "15043:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 6722,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6719,
                          "name": "param",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6662,
                          "src": "15214:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                            "typeString": "struct ACL.Param memory"
                          }
                        },
                        "id": 6720,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5896,
                        "src": "15214:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6721,
                        "name": "BLOCK_NUMBER_PARAM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5904,
                        "src": "15226:21:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "15214:33:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 6732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6729,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6662,
                            "src": "15308:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6730,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5896,
                          "src": "15308:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6731,
                          "name": "TIMESTAMP_PARAM_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5907,
                          "src": "15320:18:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "15308:30:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 6742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6739,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6662,
                              "src": "15397:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 6740,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5896,
                            "src": "15397:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6741,
                            "name": "PARAM_VALUE_PARAM_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5916,
                            "src": "15409:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15397:32:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6771,
                          "nodeType": "Block",
                          "src": "15490:176:9",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6751,
                                    "name": "param",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6662,
                                    "src": "15508:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                      "typeString": "struct ACL.Param memory"
                                    }
                                  },
                                  "id": 6752,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5896,
                                  "src": "15508:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6753,
                                    "name": "_how",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6646,
                                    "src": "15520:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 6754,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "15520:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15508:23:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 6759,
                              "nodeType": "IfStatement",
                              "src": "15504:74:9",
                              "trueBody": {
                                "id": 6758,
                                "nodeType": "Block",
                                "src": "15533:45:9",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "hexValue": "66616c7365",
                                      "id": 6756,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "15558:5:9",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    "functionReturnParameters": 6650,
                                    "id": 6757,
                                    "nodeType": "Return",
                                    "src": "15551:12:9"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6760,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6685,
                                  "src": "15591:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 6763,
                                            "name": "_how",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6646,
                                            "src": "15615:4:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 6766,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 6764,
                                              "name": "param",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6662,
                                              "src": "15620:5:9",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                                "typeString": "struct ACL.Param memory"
                                              }
                                            },
                                            "id": 6765,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "id",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5896,
                                            "src": "15620:8:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "15615:14:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 6762,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15607:7:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint240_$",
                                          "typeString": "type(uint240)"
                                        },
                                        "typeName": "uint240"
                                      },
                                      "id": 6767,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15607:23:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 6761,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15599:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 6768,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15599:32:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15591:40:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6770,
                              "nodeType": "ExpressionStatement",
                              "src": "15591:40:9"
                            }
                          ]
                        },
                        "id": 6772,
                        "nodeType": "IfStatement",
                        "src": "15393:273:9",
                        "trueBody": {
                          "id": 6750,
                          "nodeType": "Block",
                          "src": "15431:53:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6743,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6685,
                                  "src": "15445:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6745,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6662,
                                        "src": "15461:5:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 6746,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 5900,
                                      "src": "15461:11:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 6744,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15453:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 6747,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15453:20:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15445:28:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6749,
                              "nodeType": "ExpressionStatement",
                              "src": "15445:28:9"
                            }
                          ]
                        }
                      },
                      "id": 6773,
                      "nodeType": "IfStatement",
                      "src": "15304:362:9",
                      "trueBody": {
                        "id": 6738,
                        "nodeType": "Block",
                        "src": "15340:47:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6733,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6685,
                                "src": "15354:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 6734,
                                  "name": "getTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8857,
                                  "src": "15362:12:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 6735,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15362:14:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15354:22:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6737,
                            "nodeType": "ExpressionStatement",
                            "src": "15354:22:9"
                          }
                        ]
                      }
                    },
                    "id": 6774,
                    "nodeType": "IfStatement",
                    "src": "15210:456:9",
                    "trueBody": {
                      "id": 6728,
                      "nodeType": "Block",
                      "src": "15249:49:9",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 6726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 6723,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6685,
                              "src": "15263:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 6724,
                                "name": "getBlockNumber",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8837,
                                "src": "15271:14:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 6725,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15271:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15263:24:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6727,
                          "nodeType": "ExpressionStatement",
                          "src": "15263:24:9"
                        }
                      ]
                    }
                  },
                  "id": 6775,
                  "nodeType": "IfStatement",
                  "src": "15039:627:9",
                  "trueBody": {
                    "id": 6718,
                    "nodeType": "Block",
                    "src": "15072:132:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6698,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6685,
                            "src": "15086:5:9",
                            "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": 6701,
                                        "name": "param",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6662,
                                        "src": "15117:5:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        }
                                      },
                                      "id": 6702,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 5900,
                                      "src": "15117:11:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint240",
                                        "typeString": "uint240"
                                      }
                                    ],
                                    "id": 6700,
                                    "name": "IACLOracle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7698,
                                    "src": "15106:10:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IACLOracle_$7698_$",
                                      "typeString": "type(contract IACLOracle)"
                                    }
                                  },
                                  "id": 6703,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15106:23:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IACLOracle_$7698",
                                    "typeString": "contract IACLOracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6704,
                                  "name": "_who",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6639,
                                  "src": "15131:4:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6705,
                                  "name": "_where",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6641,
                                  "src": "15137:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6706,
                                  "name": "_what",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6643,
                                  "src": "15145:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6707,
                                  "name": "_how",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6646,
                                  "src": "15152:4:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IACLOracle_$7698",
                                    "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": 6699,
                                "name": "checkOracle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7099,
                                "src": "15094:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_contract$_IACLOracle_$7698_$_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": 6708,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15094:63:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6710,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15164:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 6711,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "15094:71:9",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 6709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15160:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15086:79:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6713,
                        "nodeType": "ExpressionStatement",
                        "src": "15086:79:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6714,
                            "name": "comparedTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6688,
                            "src": "15179:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 6715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15192:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "15179:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6717,
                        "nodeType": "ExpressionStatement",
                        "src": "15179:14:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6777,
                            "name": "param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6662,
                            "src": "15683:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6778,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5898,
                          "src": "15683:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 6776,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "15680:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6779,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15680:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6780,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "15696:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6781,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "RET",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15696:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "15680:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6790,
                  "nodeType": "IfStatement",
                  "src": "15676:78:9",
                  "trueBody": {
                    "id": 6789,
                    "nodeType": "Block",
                    "src": "15704:50:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6784,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6685,
                                "src": "15733:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 6783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15725:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 6785,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15725:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15742:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15725:18:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6650,
                        "id": 6788,
                        "nodeType": "Return",
                        "src": "15718:25:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6792,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6685,
                        "src": "15779:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6794,
                              "name": "param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6662,
                              "src": "15789:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 6795,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5898,
                            "src": "15789:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 6793,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "15786:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6796,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15786:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6797,
                        "name": "comparedTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6688,
                        "src": "15800:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6791,
                      "name": "compare",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7034,
                      "src": "15771:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_Op_$5894_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256,enum ACL.Op,uint256) pure returns (bool)"
                      }
                    },
                    "id": 6798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15771:40:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6650,
                  "id": 6799,
                  "nodeType": "Return",
                  "src": "15764:47:9"
                }
              ]
            },
            "documentation": null,
            "id": 6801,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalParam",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6635,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14433:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6634,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14433:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6637,
                  "name": "_paramId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14462:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 6636,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14462:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6639,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14487:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6638,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14487:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6641,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14509:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6640,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14509:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6643,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14533:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6642,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14533:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6646,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14556:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6644,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14556:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6645,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "14556:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14423:153:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6650,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6649,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6801,
                  "src": "14600:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6648,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14600:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14599:6:9"
            },
            "scope": 7166,
            "src": "14404:1414:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6965,
              "nodeType": "Block",
              "src": "15997:1131:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6820,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6803,
                            "src": "16014:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6821,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5898,
                          "src": "16014:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 6819,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16011:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16011:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6823,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16028:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6824,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "IF_ELSE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16028:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16011:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6871,
                  "nodeType": "IfStatement",
                  "src": "16007:450:9",
                  "trueBody": {
                    "id": 6870,
                    "nodeType": "Block",
                    "src": "16040:417:9",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6827,
                            "name": "conditionParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 6966,
                            "src": "16054:21:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 6826,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "16054:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6828,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16054:21:9"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6830,
                            "name": "successParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 6966,
                            "src": "16089:19:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 6829,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "16089:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6831,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16089:19:9"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6833,
                            "name": "failureParam",
                            "nodeType": "VariableDeclaration",
                            "scope": 6966,
                            "src": "16122:19:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 6832,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "16122:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6834,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16122:19:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6845,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 6835,
                                "name": "conditionParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6827,
                                "src": "16157:14:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6836,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6830,
                                "src": "16173:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6837,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6833,
                                "src": "16187:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "id": 6838,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "16156:44:9",
                            "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": 6841,
                                      "name": "_param",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6803,
                                      "src": "16228:6:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                        "typeString": "struct ACL.Param memory"
                                      }
                                    },
                                    "id": 6842,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5900,
                                    "src": "16228:12:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "id": 6840,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16220:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 6843,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16220:21:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 6839,
                              "name": "decodeParamsList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7659,
                              "src": "16203:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                                "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                              }
                            },
                            "id": 6844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16203:39:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                              "typeString": "tuple(uint32,uint32,uint32)"
                            }
                          },
                          "src": "16156:86:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6846,
                        "nodeType": "ExpressionStatement",
                        "src": "16156:86:9"
                      },
                      {
                        "assignments": [
                          6848
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6848,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 6966,
                            "src": "16256:11:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6847,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "16256:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6857,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6850,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6805,
                              "src": "16281:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6851,
                              "name": "conditionParam",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6827,
                              "src": "16294:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6852,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6807,
                              "src": "16310:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6853,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6809,
                              "src": "16316:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6854,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6811,
                              "src": "16324:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6855,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6814,
                              "src": "16331:4:9",
                              "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": 6849,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6801,
                            "src": "16270:10:9",
                            "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": 6856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16270:66:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16256:80:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6859,
                              "name": "_paramsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6805,
                              "src": "16369:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "id": 6860,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6848,
                                "src": "16382:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 6862,
                                "name": "failureParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6833,
                                "src": "16406:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 6863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "16382:36:9",
                              "trueExpression": {
                                "argumentTypes": null,
                                "id": 6861,
                                "name": "successParam",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6830,
                                "src": "16391:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6864,
                              "name": "_who",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6807,
                              "src": "16420:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6865,
                              "name": "_where",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6809,
                              "src": "16426:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6866,
                              "name": "_what",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6811,
                              "src": "16434:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6867,
                              "name": "_how",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6814,
                              "src": "16441:4:9",
                              "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": 6858,
                            "name": "_evalParam",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6801,
                            "src": "16358:10:9",
                            "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": 6868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16358:88:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6818,
                        "id": 6869,
                        "nodeType": "Return",
                        "src": "16351:95:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6873,
                      "name": "param1",
                      "nodeType": "VariableDeclaration",
                      "scope": 6966,
                      "src": "16467:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 6872,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16467:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6874,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16467:13:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6876,
                      "name": "param2",
                      "nodeType": "VariableDeclaration",
                      "scope": 6966,
                      "src": "16490:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 6875,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16490:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6877,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16490:13:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 6878,
                          "name": "param1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6873,
                          "src": "16515:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6879,
                          "name": "param2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6876,
                          "src": "16523:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        null
                      ],
                      "id": 6880,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "16514:17:9",
                      "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": 6883,
                                "name": "_param",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6803,
                                "src": "16559:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                  "typeString": "struct ACL.Param memory"
                                }
                              },
                              "id": 6884,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5900,
                              "src": "16559:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint240",
                                "typeString": "uint240"
                              }
                            ],
                            "id": 6882,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16551:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 6885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16551:21:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 6881,
                        "name": "decodeParamsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7659,
                        "src": "16534:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$_t_uint32_$_t_uint32_$",
                          "typeString": "function (uint256) pure returns (uint32,uint32,uint32)"
                        }
                      },
                      "id": 6886,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16534:39:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32,uint32)"
                      }
                    },
                    "src": "16514:59:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6888,
                  "nodeType": "ExpressionStatement",
                  "src": "16514:59:9"
                },
                {
                  "assignments": [
                    6890
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6890,
                      "name": "r1",
                      "nodeType": "VariableDeclaration",
                      "scope": 6966,
                      "src": "16583:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6889,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16583:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6899,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6892,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6805,
                        "src": "16604:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6893,
                        "name": "param1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6873,
                        "src": "16617:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6894,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6807,
                        "src": "16625:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6895,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6809,
                        "src": "16631:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6896,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6811,
                        "src": "16639:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6897,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6814,
                        "src": "16646:4:9",
                        "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": 6891,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6801,
                      "src": "16593:10:9",
                      "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": 6898,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16593:58:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16583:68:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6901,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6803,
                            "src": "16669:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6902,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5898,
                          "src": "16669:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 6900,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16666:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16666:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6904,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16683:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NOT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16683:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16666:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6911,
                  "nodeType": "IfStatement",
                  "src": "16662:64:9",
                  "trueBody": {
                    "id": 6910,
                    "nodeType": "Block",
                    "src": "16691:35:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "16712:3:9",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 6907,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6890,
                            "src": "16713:2:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6818,
                        "id": 6909,
                        "nodeType": "Return",
                        "src": "16705:10:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6912,
                      "name": "r1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6890,
                      "src": "16740:2:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 6919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6914,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6803,
                              "src": "16749:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 6915,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5898,
                            "src": "16749:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 6913,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "16746:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16746:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6917,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "16763:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "OR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16763:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16746:22:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16740:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6924,
                  "nodeType": "IfStatement",
                  "src": "16736:70:9",
                  "trueBody": {
                    "id": 6923,
                    "nodeType": "Block",
                    "src": "16770:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 6921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16791:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6818,
                        "id": 6922,
                        "nodeType": "Return",
                        "src": "16784:11:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6926,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "16820:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 6925,
                        "name": "r1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6890,
                        "src": "16821:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      },
                      "id": 6933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6928,
                              "name": "_param",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6803,
                              "src": "16830:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                                "typeString": "struct ACL.Param memory"
                              }
                            },
                            "id": 6929,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "op",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5898,
                            "src": "16830:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 6927,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "16827:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6930,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16827:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6931,
                          "name": "Op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5894,
                          "src": "16844:2:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                            "typeString": "type(enum ACL.Op)"
                          }
                        },
                        "id": 6932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "AND",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16844:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Op_$5894",
                          "typeString": "enum ACL.Op"
                        }
                      },
                      "src": "16827:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16820:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6938,
                  "nodeType": "IfStatement",
                  "src": "16816:73:9",
                  "trueBody": {
                    "id": 6937,
                    "nodeType": "Block",
                    "src": "16852:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 6935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16873:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 6818,
                        "id": 6936,
                        "nodeType": "Return",
                        "src": "16866:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6940
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6940,
                      "name": "r2",
                      "nodeType": "VariableDeclaration",
                      "scope": 6966,
                      "src": "16899:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 6939,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16899:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6949,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6942,
                        "name": "_paramsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6805,
                        "src": "16920:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6943,
                        "name": "param2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6876,
                        "src": "16933:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6944,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6807,
                        "src": "16941:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6945,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6809,
                        "src": "16947:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6946,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6811,
                        "src": "16955:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6947,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6814,
                        "src": "16962:4:9",
                        "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": 6941,
                      "name": "_evalParam",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6801,
                      "src": "16909:10:9",
                      "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": 6948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16909:58:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16899:68:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6951,
                            "name": "_param",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6803,
                            "src": "16985:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                              "typeString": "struct ACL.Param memory"
                            }
                          },
                          "id": 6952,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "op",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5898,
                          "src": "16985:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 6950,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16982:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6953,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16982:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6954,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "16999:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XOR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16999:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "16982:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6962,
                  "nodeType": "IfStatement",
                  "src": "16978:69:9",
                  "trueBody": {
                    "id": 6961,
                    "nodeType": "Block",
                    "src": "17007:40:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 6959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6957,
                            "name": "r1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6890,
                            "src": "17028:2:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6958,
                            "name": "r2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6940,
                            "src": "17034:2:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "17028:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6818,
                        "id": 6960,
                        "nodeType": "Return",
                        "src": "17021:15:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6963,
                    "name": "r2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6940,
                    "src": "17064:2:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6818,
                  "id": 6964,
                  "nodeType": "Return",
                  "src": "17057:9:9"
                }
              ]
            },
            "documentation": null,
            "id": 6966,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_evalLogic",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6815,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6803,
                  "name": "_param",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15844:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Param_$5901_memory_ptr",
                    "typeString": "struct ACL.Param"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 6802,
                    "name": "Param",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5901,
                    "src": "15844:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Param_$5901_storage_ptr",
                      "typeString": "struct ACL.Param"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6805,
                  "name": "_paramsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15858:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6804,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15858:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6807,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15879:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6806,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15879:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6809,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15893:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6808,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15893:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6811,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15909:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6810,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15909:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6814,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15924:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6812,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15924:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 6813,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15924:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15843:96:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6818,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6817,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6966,
                  "src": "15987:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6816,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15987:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15986:6:9"
            },
            "scope": 7166,
            "src": "15824:1304:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7033,
              "nodeType": "Block",
              "src": "17212:647:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6977,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17226:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6978,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17233:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "EQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17233:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17226:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6985,
                  "nodeType": "IfStatement",
                  "src": "17222:34:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6981,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17248:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6982,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17254:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17248:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 6984,
                    "nodeType": "Return",
                    "src": "17241:15:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6989,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6986,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17329:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6987,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17336:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NEQ",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17336:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17329:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6994,
                  "nodeType": "IfStatement",
                  "src": "17325:34:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6990,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17351:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6991,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17357:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17351:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 6993,
                    "nodeType": "Return",
                    "src": "17344:15:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 6998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6995,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17432:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6996,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17439:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 6997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17439:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17432:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7003,
                  "nodeType": "IfStatement",
                  "src": "17428:33:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6999,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17454:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7000,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17459:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17454:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 7002,
                    "nodeType": "Return",
                    "src": "17447:14:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 7007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7004,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17535:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7005,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17542:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 7006,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LT",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17542:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17535:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7012,
                  "nodeType": "IfStatement",
                  "src": "17531:33:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7010,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7008,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17557:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7009,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17562:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17557:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 7011,
                    "nodeType": "Return",
                    "src": "17550:14:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 7016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7013,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17638:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7014,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17645:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 7015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "GTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17645:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17638:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7021,
                  "nodeType": "IfStatement",
                  "src": "17634:34:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7017,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17660:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7018,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17666:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17660:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 7020,
                    "nodeType": "Return",
                    "src": "17653:15:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    },
                    "id": 7025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7022,
                      "name": "_op",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6970,
                      "src": "17741:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7023,
                        "name": "Op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5894,
                        "src": "17748:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Op_$5894_$",
                          "typeString": "type(enum ACL.Op)"
                        }
                      },
                      "id": 7024,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "LTE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17748:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Op_$5894",
                        "typeString": "enum ACL.Op"
                      }
                    },
                    "src": "17741:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7030,
                  "nodeType": "IfStatement",
                  "src": "17737:34:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7028,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7026,
                        "name": "_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6968,
                        "src": "17763:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7027,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "17769:2:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17763:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 6976,
                    "id": 7029,
                    "nodeType": "Return",
                    "src": "17756:15:9"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 7031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17847:5:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 6976,
                  "id": 7032,
                  "nodeType": "Return",
                  "src": "17840:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 7034,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6968,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 7034,
                  "src": "17151:10:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6967,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17151:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6970,
                  "name": "_op",
                  "nodeType": "VariableDeclaration",
                  "scope": 7034,
                  "src": "17163:6:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Op_$5894",
                    "typeString": "enum ACL.Op"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 6969,
                    "name": "Op",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5894,
                    "src": "17163:2:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Op_$5894",
                      "typeString": "enum ACL.Op"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6972,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 7034,
                  "src": "17171:10:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17171:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17150:32:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 6976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6975,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7034,
                  "src": "17206:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6974,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17206:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17205:6:9"
            },
            "scope": 7166,
            "src": "17134:725:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7098,
              "nodeType": "Block",
              "src": "18000:1057:9",
              "statements": [
                {
                  "assignments": [
                    7051
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7051,
                      "name": "sig",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18010:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 7050,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "18010:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7055,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7052,
                        "name": "_oracleAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7036,
                        "src": "18023:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACLOracle_$7698",
                          "typeString": "contract IACLOracle"
                        }
                      },
                      "id": 7053,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "canPerform",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7697,
                      "src": "18023:22:9",
                      "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": 7054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "18023:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18010:44:9"
                },
                {
                  "assignments": [
                    7057
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7057,
                      "name": "checkCalldata",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18165:26:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 7056,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "18165:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7066,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7060,
                        "name": "sig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7051,
                        "src": "18217:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7061,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7038,
                        "src": "18222:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7062,
                        "name": "_where",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7040,
                        "src": "18228:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7063,
                        "name": "_what",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7042,
                        "src": "18236:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7064,
                        "name": "_how",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7045,
                        "src": "18243:4:9",
                        "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": 7058,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12657,
                        "src": "18194:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 7059,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "18194:22:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes4) pure returns (bytes memory)"
                      }
                    },
                    "id": 7065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18194:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18165:83:9"
                },
                {
                  "assignments": [
                    7068
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7068,
                      "name": "oracleCheckGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18258:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7067,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18258:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7070,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 7069,
                    "name": "ORACLE_CHECK_GAS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5938,
                    "src": "18283:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18258:41:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7072,
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18310:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7071,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18310:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7073,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18310:7:9"
                },
                {
                  "externalReferences": [
                    {
                      "checkCalldata": {
                        "declaration": 7057,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18400:13:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "checkCalldata": {
                        "declaration": 7057,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18428:13:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ok": {
                        "declaration": 7072,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18350:2:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "oracleCheckGas": {
                        "declaration": 7068,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18367:14:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "_oracleAddr": {
                        "declaration": 7036,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18383:11:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7074,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ok := staticcall(oracleCheckGas, _oracleAddr, add(checkCalldata, 0x20), mload(checkCalldata), 0, 0)\n}",
                  "src": "18327:144:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 7076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18473:3:9",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 7075,
                      "name": "ok",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7072,
                      "src": "18474:2:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7080,
                  "nodeType": "IfStatement",
                  "src": "18469:46:9",
                  "trueBody": {
                    "id": 7079,
                    "nodeType": "Block",
                    "src": "18478:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 7077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18499:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 7049,
                        "id": 7078,
                        "nodeType": "Return",
                        "src": "18492:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7082,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18525:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7081,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18525:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7083,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18525:12:9"
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 7082,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18558:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7084,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    size := returndatasize()\n}",
                  "src": "18547:46:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7085,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7082,
                      "src": "18595:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 7086,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18603:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "18595:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7091,
                  "nodeType": "IfStatement",
                  "src": "18591:53:9",
                  "trueBody": {
                    "id": 7090,
                    "nodeType": "Block",
                    "src": "18607:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 7088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18628:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 7049,
                        "id": 7089,
                        "nodeType": "Return",
                        "src": "18621:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7093,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 7099,
                      "src": "18654:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7092,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18654:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7094,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18654:11:9"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 7093,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18847:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 7082,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18790:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7095,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    returndatacopy(ptr, 0, size)\n    result := mload(ptr)\n    mstore(ptr, 0)\n}",
                  "src": "18675:368:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7096,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7093,
                    "src": "19044:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7049,
                  "id": 7097,
                  "nodeType": "Return",
                  "src": "19037:13:9"
                }
              ]
            },
            "documentation": null,
            "id": 7099,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7036,
                  "name": "_oracleAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17886:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IACLOracle_$7698",
                    "typeString": "contract IACLOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7035,
                    "name": "IACLOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7698,
                    "src": "17886:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IACLOracle_$7698",
                      "typeString": "contract IACLOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7038,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17910:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7037,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17910:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7040,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17924:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7039,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17924:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7042,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17940:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7041,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "17940:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7045,
                  "name": "_how",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17955:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7043,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17955:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7044,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "17955:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17885:85:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 7049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7048,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "17994:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7047,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17994:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17993:6:9"
            },
            "scope": 7166,
            "src": "17865:1192:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7123,
              "nodeType": "Block",
              "src": "19218:135:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7108,
                        "name": "permissionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5960,
                        "src": "19228:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 7113,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7110,
                            "name": "_app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7103,
                            "src": "19255:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7111,
                            "name": "_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7105,
                            "src": "19261:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 7109,
                          "name": "roleHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7143,
                          "src": "19246:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (address,bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 7112,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19246:21:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "19228:40:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7114,
                      "name": "_newManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7101,
                      "src": "19271:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19228:54:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7116,
                  "nodeType": "ExpressionStatement",
                  "src": "19228:54:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7118,
                        "name": "_app",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7103,
                        "src": "19321:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7119,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7105,
                        "src": "19327:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7120,
                        "name": "_newManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7101,
                        "src": "19334:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7117,
                      "name": "ChangePermissionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5988,
                      "src": "19297:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,bytes32,address)"
                      }
                    },
                    "id": 7121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19297:49:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7122,
                  "nodeType": "EmitStatement",
                  "src": "19292:54:9"
                }
              ]
            },
            "documentation": "@dev Internal function that sets management",
            "id": 7124,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPermissionManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7101,
                  "name": "_newManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 7124,
                  "src": "19159:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19159:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7103,
                  "name": "_app",
                  "nodeType": "VariableDeclaration",
                  "scope": 7124,
                  "src": "19180:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19180:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7105,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 7124,
                  "src": "19194:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7104,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19194:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19158:50:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 7107,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19218:0:9"
            },
            "scope": 7166,
            "src": "19128:225:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7142,
              "nodeType": "Block",
              "src": "19440:74:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "524f4c45",
                            "id": 7136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19484:6:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ed9ea7bc2a13bc59432ab07436e7f7f5450f82d4b48c401bed177bfaf36b1873",
                              "typeString": "literal_string \"ROLE\""
                            },
                            "value": "ROLE"
                          },
                          {
                            "argumentTypes": null,
                            "id": 7137,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7126,
                            "src": "19492:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7138,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7128,
                            "src": "19500:5:9",
                            "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": 7134,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12657,
                            "src": "19467:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 7135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19467:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 7139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19467:39:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 7133,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12664,
                      "src": "19457:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 7140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19457:50:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 7132,
                  "id": 7141,
                  "nodeType": "Return",
                  "src": "19450:57:9"
                }
              ]
            },
            "documentation": null,
            "id": 7143,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "roleHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7129,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7126,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 7143,
                  "src": "19377:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7125,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19377:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7128,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 7143,
                  "src": "19393:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7127,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19393:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19376:31:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 7132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7131,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7143,
                  "src": "19431:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7130,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19431:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19430:9:9"
            },
            "scope": 7166,
            "src": "19359:155:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7164,
              "nodeType": "Block",
              "src": "19621:86:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "5045524d495353494f4e",
                            "id": 7157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19665:12:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ec1029a550434f46cc722ae017b3a2e96fd6dfb85f48bea21a1c682e8b994de1",
                              "typeString": "literal_string \"PERMISSION\""
                            },
                            "value": "PERMISSION"
                          },
                          {
                            "argumentTypes": null,
                            "id": 7158,
                            "name": "_who",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7145,
                            "src": "19679:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7159,
                            "name": "_where",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7147,
                            "src": "19685:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7160,
                            "name": "_what",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7149,
                            "src": "19693:5:9",
                            "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": 7155,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12657,
                            "src": "19648:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 7156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19648:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 7161,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19648:51:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 7154,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12664,
                      "src": "19638:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 7162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19638:62:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 7153,
                  "id": 7163,
                  "nodeType": "Return",
                  "src": "19631:69:9"
                }
              ]
            },
            "documentation": null,
            "id": 7165,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "permissionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7145,
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 7165,
                  "src": "19544:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7144,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19544:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7147,
                  "name": "_where",
                  "nodeType": "VariableDeclaration",
                  "scope": 7165,
                  "src": "19558:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7146,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19558:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7149,
                  "name": "_what",
                  "nodeType": "VariableDeclaration",
                  "scope": 7165,
                  "src": "19574:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7148,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19574:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19543:45:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 7153,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7152,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7165,
                  "src": "19612:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7151,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19612:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19611:9:9"
            },
            "scope": 7166,
            "src": "19520:187:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 7167,
        "src": "251:19458:9"
      }
    ],
    "src": "0:19710:9"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.1",
  "updatedAt": "2019-03-29T09:45:33.458Z",
  "devdoc": {
    "methods": {
      "allowRecoverability(address)": {
        "details": "By default deriving from AragonApp makes it recoverable",
        "params": {
          "token": "Token address that would be recovered"
        },
        "return": "bool whether the app allows the recovery"
      },
      "burnPermissionManager(address,bytes32)": {
        "params": {
          "_app": "Address of the app in which the permission is being burned",
          "_role": "Identifier for the group of actions being burned"
        }
      },
      "canPerform(address,bytes32,uint256[])": {
        "details": "Check whether an action can be performed by a sender for a particular role on this app",
        "params": {
          "_params": "Permission params for the role",
          "_role": "Role on this app",
          "_sender": "Sender of the call"
        },
        "return": "Boolean indicating whether the sender has the permissions to perform the action.        Always returns false if the app hasn't been initialized yet."
      },
      "createBurnedPermission(address,bytes32)": {
        "params": {
          "_app": "Address of the app in which the permission is being burned",
          "_role": "Identifier for the group of actions being burned"
        }
      },
      "createPermission(address,address,bytes32,address)": {
        "details": "Creates a permission that wasn't previously set and managed.     If a created permission is removed it is possible to reset it with createPermission.     This is the **ONLY** way to create permissions and set managers to permissions that don't     have a manager.     In terms of the ACL being initialized, this function implicitly protects all the other     state-changing external functions, as they all require the sender to be a manager.",
        "params": {
          "_app": "Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_manager": "Address of the entity that will be able to grant and revoke the permission further.",
          "_role": "Identifier for the group of actions in app given access to perform"
        }
      },
      "getInitializationBlock()": {
        "return": "Block number in which the contract was initialized"
      },
      "getPermissionManager(address,bytes32)": {
        "details": "Get manager for permission",
        "params": {
          "_app": "Address of the app",
          "_role": "Identifier for a group of actions in app"
        },
        "return": "address of the manager for the permission"
      },
      "getPermissionParam(address,address,bytes32,uint256)": {
        "params": {
          "_app": "Address of the app",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_index": "Index of parameter in the array",
          "_role": "Identifier for a group of actions in app"
        },
        "return": "Parameter (id, op, value)"
      },
      "getPermissionParamsLength(address,address,bytes32)": {
        "params": {
          "_app": "Address of the app",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_role": "Identifier for a group of actions in app"
        },
        "return": "Length of the array"
      },
      "getRecoveryVault()": {
        "details": "Get the recovery vault for the app",
        "return": "Recovery vault address for the app"
      },
      "grantPermission(address,address,bytes32)": {
        "details": "Grants permission if allowed. This requires `msg.sender` to be the permission manager",
        "params": {
          "_app": "Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_role": "Identifier for the group of actions in app given access to perform"
        }
      },
      "grantPermissionP(address,address,bytes32,uint256[])": {
        "details": "Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager",
        "params": {
          "_app": "Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)",
          "_entity": "Address of the whitelisted entity that will be able to perform the role",
          "_params": "Permission parameters",
          "_role": "Identifier for the group of actions in app given access to perform"
        }
      },
      "hasInitialized()": {
        "return": "Whether the contract has been initialized by the time of the current block"
      },
      "hasPermission(address,address,bytes32,bytes)": {
        "details": "Function called by apps to check ACL on kernel or to check permission statu",
        "params": {
          "_how": "Permission parameters",
          "_where": "Identifier for a group of actions in app",
          "_who": "Sender of the original call"
        },
        "return": "boolean indicating whether the ACL allows the role or not"
      },
      "initialize(address)": {
        "details": "Initialize can only be called once. It saves the block number in which it was initialized.",
        "params": {
          "_permissionsCreator": "Entity that will be given permission over createPermission"
        }
      },
      "removePermissionManager(address,bytes32)": {
        "params": {
          "_app": "Address of the app in which the permission is being unmanaged",
          "_role": "Identifier for the group of actions being unmanaged"
        }
      },
      "revokePermission(address,address,bytes32)": {
        "details": "Revokes permission if allowed. This requires `msg.sender` to be the the permission manager",
        "params": {
          "_app": "Address of the app in which the role will be revoked",
          "_entity": "Address of the whitelisted entity to revoke access from",
          "_role": "Identifier for the group of actions in app being revoked"
        }
      },
      "setPermissionManager(address,address,bytes32)": {
        "params": {
          "_app": "Address of the app in which the permission management is being transferred",
          "_newManager": "Address for the new manager",
          "_role": "Identifier for the group of actions being transferred"
        }
      },
      "transferToVault(address)": {
        "params": {
          "_token": "Token balance to be sent to recovery vault."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "burnPermissionManager(address,bytes32)": {
        "notice": "Burn `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)"
      },
      "createBurnedPermission(address,bytes32)": {
        "notice": "Burn non-existent `_role` in `_app`, so no modification can be made to it (grant, revoke, permission manager)"
      },
      "createPermission(address,address,bytes32,address)": {
        "notice": "Create a new permission granting `_entity` the ability to perform actions requiring `_role` on `_app`, setting `_manager` as the permission's manager"
      },
      "getPermissionParam(address,address,bytes32,uint256)": {
        "notice": "Get parameter for permission"
      },
      "getPermissionParamsLength(address,address,bytes32)": {
        "notice": "Get parameters for permission array length"
      },
      "grantPermission(address,address,bytes32)": {
        "notice": "Grant `_entity` the ability to perform actions requiring `_role` on `_app`"
      },
      "grantPermissionP(address,address,bytes32,uint256[])": {
        "notice": "Grant `_entity` the ability to perform actions requiring `_role` on `_app`"
      },
      "initialize(address)": {
        "notice": "Initialize an ACL instance and set `_permissionsCreator` as the entity that can create other permissions"
      },
      "removePermissionManager(address,bytes32)": {
        "notice": "Remove the manager of `_role` in `_app`"
      },
      "revokePermission(address,address,bytes32)": {
        "notice": "Revoke from `_entity` the ability to perform actions requiring `_role` on `_app`"
      },
      "setPermissionManager(address,address,bytes32)": {
        "notice": "Set `_newManager` as the manager of `_role` in `_app`"
      },
      "transferToVault(address)": {
        "notice": "Send funds to recovery Vault. This contract should never receive funds,        but in case it does, this function allows one to recover them."
      }
    }
  }
}