{
  "_format": "hh-sol-artifact-1",
  "contractName": "PermissionsManager",
  "sourceName": "contracts/permissions/PermissionsManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        }
      ],
      "name": "Authorized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        }
      ],
      "name": "Unauthorized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ANY_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        }
      ],
      "name": "authorize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IAuthorizer",
              "name": "target",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "grant",
                  "type": "bool"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes4",
                      "name": "what",
                      "type": "bytes4"
                    },
                    {
                      "internalType": "address",
                      "name": "who",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct Permission",
                  "name": "permission",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PermissionChange[]",
              "name": "changes",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct PermissionChangeRequest[]",
          "name": "requests",
          "type": "tuple[]"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        }
      ],
      "name": "isAuthorized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        }
      ],
      "name": "unauthorize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051610b8c380380610b8c83398101604081905261002f916100e9565b6001805561004481635103d99b60e11b61007d565b61005581635103d99b60e11b61007d565b610066306324cfc3cf60e21b61007d565b61007730633323521b60e11b61007d565b50610119565b6001600160a01b0382166000818152602081815260408083206001600160e01b0319861680855290835292819020805460ff19166001179055519182527f7f06c1c34ad47198873da9dcde2e40904035d41b23da3a9132df674a75022df7910160405180910390a25050565b6000602082840312156100fb57600080fd5b81516001600160a01b038116811461011257600080fd5b9392505050565b610a64806101286000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063933f0f3c11610050578063933f0f3c146100c6578063a207b336146100d9578063d9972b96146100ec57600080fd5b80633f81a1921461006c5780636646a436146100b1575b600080fd5b61008773ffffffffffffffffffffffffffffffffffffffff81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100c46100bf36600461066a565b61010f565b005b6100c46100d436600461066a565b61014b565b6100c46100e736600461076a565b610183565b6100ff6100fa36600461066a565b61026f565b60405190151581526020016100a8565b61013d336000357fffffffff0000000000000000000000000000000000000000000000000000000016610325565b6101478282610395565b5050565b610179336000357fffffffff0000000000000000000000000000000000000000000000000000000016610325565b6101478282610442565b6101b1336000357fffffffff0000000000000000000000000000000000000000000000000000000016610325565b600260015403610222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015560005b815181101561026757610255828281518110610248576102486109a0565b60200260200101516104ea565b8061025f816109cf565b91505061022a565b505060018055565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081527f50c7a3d1a23c7ff4a61d37c3f2c4aeb36cf60b43ee893723db201d3eb941cbad602052604081205460ff168061031e575073ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff165b9392505050565b61032f828261026f565b610147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415554485f53454e4445525f4e4f545f414c4c4f5745440000000000000000006044820152606401610219565b73ffffffffffffffffffffffffffffffffffffffff82166000818152602081815260408083207fffffffff0000000000000000000000000000000000000000000000000000000086168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527fa2e97b9eea8d1168700e334304edd057dff89c0384ca6f920c73cc3e48c8e52391015b60405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff82166000818152602081815260408083207fffffffff0000000000000000000000000000000000000000000000000000000086168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519182527f7f06c1c34ad47198873da9dcde2e40904035d41b23da3a9132df674a75022df79101610436565b805160005b82602001515181101561060b57600083602001518281518110610514576105146109a0565b602002602001015190508060000151610548578273ffffffffffffffffffffffffffffffffffffffff16636646a436610565565b8273ffffffffffffffffffffffffffffffffffffffff1663933f0f3c5b6020838101519081015190516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b8116825273ffffffffffffffffffffffffffffffffffffffff909316600482015291166024820152604401600060405180830381600087803b1580156105df57600080fd5b505af11580156105f3573d6000803e3d6000fd5b50505050508080610603906109cf565b9150506104ef565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461063257600080fd5b50565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461066557600080fd5b919050565b6000806040838503121561067d57600080fd5b823561068881610610565b915061069660208401610635565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156106f1576106f161069f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561073e5761073e61069f565b604052919050565b600067ffffffffffffffff8211156107605761076061069f565b5060051b60200190565b60006020828403121561077c57600080fd5b67ffffffffffffffff8235111561079257600080fd5b8135820183601f8201126107a557600080fd5b6107b76107b28235610746565b6106f7565b81358082526020808301929160051b8401018610156107d557600080fd5b602083015b6020843560051b8501018110156109965767ffffffffffffffff8135111561080157600080fd5b60407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082358601890301121561083657600080fd5b61083e6106ce565b61084e6020833587010135610610565b813585016020810135825267ffffffffffffffff604090910135111561087357600080fd5b81358501604081013501603f8101891361088c57600080fd5b61089c6107b26020830135610746565b602082810135808352908201919060600283016040018b10156108be57600080fd5b604083015b6040606060208601350285010181101561097d576060818d0312156108e757600080fd5b6108ef6106ce565b8135801515146108fe57600080fd5b8135815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f0301121561093457600080fd5b61093c6106ce565b61094860208401610635565b81526109576040840135610610565b6040830135602082015280602083015250808452506020830192506060810190506108c3565b50602084810191909152928652505092830192016107da565b5095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a27577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212201dbb80f364bf8482ea83db98aa255d7b07ba8567403869e6d819a5bc6e49dbf364736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c8063933f0f3c11610050578063933f0f3c146100c6578063a207b336146100d9578063d9972b96146100ec57600080fd5b80633f81a1921461006c5780636646a436146100b1575b600080fd5b61008773ffffffffffffffffffffffffffffffffffffffff81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100c46100bf36600461066a565b61010f565b005b6100c46100d436600461066a565b61014b565b6100c46100e736600461076a565b610183565b6100ff6100fa36600461066a565b61026f565b60405190151581526020016100a8565b61013d336000357fffffffff0000000000000000000000000000000000000000000000000000000016610325565b6101478282610395565b5050565b610179336000357fffffffff0000000000000000000000000000000000000000000000000000000016610325565b6101478282610442565b6101b1336000357fffffffff0000000000000000000000000000000000000000000000000000000016610325565b600260015403610222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015560005b815181101561026757610255828281518110610248576102486109a0565b60200260200101516104ea565b8061025f816109cf565b91505061022a565b505060018055565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081527f50c7a3d1a23c7ff4a61d37c3f2c4aeb36cf60b43ee893723db201d3eb941cbad602052604081205460ff168061031e575073ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff165b9392505050565b61032f828261026f565b610147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415554485f53454e4445525f4e4f545f414c4c4f5745440000000000000000006044820152606401610219565b73ffffffffffffffffffffffffffffffffffffffff82166000818152602081815260408083207fffffffff0000000000000000000000000000000000000000000000000000000086168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527fa2e97b9eea8d1168700e334304edd057dff89c0384ca6f920c73cc3e48c8e52391015b60405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff82166000818152602081815260408083207fffffffff0000000000000000000000000000000000000000000000000000000086168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519182527f7f06c1c34ad47198873da9dcde2e40904035d41b23da3a9132df674a75022df79101610436565b805160005b82602001515181101561060b57600083602001518281518110610514576105146109a0565b602002602001015190508060000151610548578273ffffffffffffffffffffffffffffffffffffffff16636646a436610565565b8273ffffffffffffffffffffffffffffffffffffffff1663933f0f3c5b6020838101519081015190516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b8116825273ffffffffffffffffffffffffffffffffffffffff909316600482015291166024820152604401600060405180830381600087803b1580156105df57600080fd5b505af11580156105f3573d6000803e3d6000fd5b50505050508080610603906109cf565b9150506104ef565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461063257600080fd5b50565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461066557600080fd5b919050565b6000806040838503121561067d57600080fd5b823561068881610610565b915061069660208401610635565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156106f1576106f161069f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561073e5761073e61069f565b604052919050565b600067ffffffffffffffff8211156107605761076061069f565b5060051b60200190565b60006020828403121561077c57600080fd5b67ffffffffffffffff8235111561079257600080fd5b8135820183601f8201126107a557600080fd5b6107b76107b28235610746565b6106f7565b81358082526020808301929160051b8401018610156107d557600080fd5b602083015b6020843560051b8501018110156109965767ffffffffffffffff8135111561080157600080fd5b60407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082358601890301121561083657600080fd5b61083e6106ce565b61084e6020833587010135610610565b813585016020810135825267ffffffffffffffff604090910135111561087357600080fd5b81358501604081013501603f8101891361088c57600080fd5b61089c6107b26020830135610746565b602082810135808352908201919060600283016040018b10156108be57600080fd5b604083015b6040606060208601350285010181101561097d576060818d0312156108e757600080fd5b6108ef6106ce565b8135801515146108fe57600080fd5b8135815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f0301121561093457600080fd5b61093c6106ce565b61094860208401610635565b81526109576040840135610610565b6040830135602082015280602083015250808452506020830192506060810190506108c3565b50602084810191909152928652505092830192016107da565b5095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a27577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212201dbb80f364bf8482ea83db98aa255d7b07ba8567403869e6d819a5bc6e49dbf364736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
