{
  "contractName": "ERC1538Proxy",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_erc1538Delegate",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "message",
          "type": "string"
        }
      ],
      "name": "CommitMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes4",
          "name": "functionId",
          "type": "bytes4"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldDelegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newDelegate",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "functionSignature",
          "type": "string"
        }
      ],
      "name": "FunctionUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback",
      "payable": true
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive",
      "payable": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.4+commit.1dca32f3\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc1538Delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"CommitMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"functionId\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDelegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"functionSignature\",\"type\":\"string\"}],\"name\":\"FunctionUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Proxy/ERC1538Proxy.sol\":\"ERC1538Proxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Core.sol\":{\"keccak256\":\"0xd64a96f64947644f1f74ff2a929f908efbd947096094a746ff6c48a8c13bae7a\",\"urls\":[\"bzz-raw://ad46a3ce0d629acc78122a5abe5ad043a4cf8076410c799fb19950f2e83aab29\",\"dweb:/ipfs/QmPV7nwnwWr4GshhnTrhthoqEsrKyDdCPfKkNQbptExcrS\"]},\"/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Proxy/ERC1538Proxy.sol\":{\"keccak256\":\"0xd39934429113dd867d3247465c096991732f84da7aa650facddc60e34d216e3c\",\"urls\":[\"bzz-raw://6c6f8a783ee3614b2b0780ba9f42c8625cc14e7c2d5c09069842415edce19e94\",\"dweb:/ipfs/QmWeexbdBceS2pfnSBePQLYgwW9swZmnqimB3BfMCtRT8b\"]},\"/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Store.sol\":{\"keccak256\":\"0x4d1e8821dc216013f20044bbf82df3c2ab2c739d1b2ce4d90c15cb65f85707d8\",\"urls\":[\"bzz-raw://e36d4db70862f87b8657c19330f0d45e8e7018ebcf3df97525638c8caa919d2b\",\"dweb:/ipfs/QmZqsrXPsyRkRkjuupKG2SYsyUTBXqe7nkkCy7RKxDKz1L\"]},\"/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/IERC1538.sol\":{\"keccak256\":\"0x8cff03c7a2520c3312650990cd3defb9168022790c93030e577ffbfea378b906\",\"urls\":[\"bzz-raw://36cb2e3c66e04aee1681a662bd3db7713c0edfd6053cc75c95b4bc2fd48d0455\",\"dweb:/ipfs/Qmb3upBWiTaM3kfKG2riufsroxSoA5hJSxxsdZjBPzYbA3\"]},\"/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/Upgradeability/Proxy.sol\":{\"keccak256\":\"0xd89f285d80cfeff0efc87f11dbc024a587da3bba142a06695cbac7e4050e9302\",\"urls\":[\"bzz-raw://9c8323ec7efc9fde6c1529f1070c3f3406adb5f8836b17221530d8f0110fe3f4\",\"dweb:/ipfs/QmURRsX9L2gZ83aMULtY1EuRMJExHhFYErCbkxE5CNkAzE\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x0de74dfa6b37943c1b834cbd8fb7a8d052e5ff80c7adb33692102dd6cd2985e9\",\"urls\":[\"bzz-raw://9d2d827fcf4a838f5821732c0acd6a40d21c2a5a2cfe2563feec91465f47bb60\",\"dweb:/ipfs/Qmex3wMKf5Sghbfvr288RUg1kP2uAyTMf11w83WbMbpQQc\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x13846e13b9a53dec12db1afd1e6ef8fb6b3a34577c59bab7b84db5c0fe227c6e\",\"urls\":[\"bzz-raw://ed869339a2fa5d4dda5f917d5b7970d845d1cdc1c02c7edb0f84ef1cda4d7646\",\"dweb:/ipfs/QmVYwkKDyxs9vT9S3HUHaQZ798NF3gYZ1QMg69CGedssgd\"]},\"solstruct/contracts/libs/LibMap2.bytes4.address.bytes.sol\":{\"keccak256\":\"0x471645d4b20cc36606122fc6bb692cdf8489118547f90bde2740cb73b1e64d54\",\"urls\":[\"bzz-raw://7ca824c03cd077e6d9630eaa4755787c785a61f612cb8e3ba13d0ce92ee55738\",\"dweb:/ipfs/QmdavtXDokZ7vWZt8pMxPi7DaG3Hd1Q5MyeJjXGRFQuL9r\"]},\"solstruct/contracts/libs/LibSet.bytes4.sol\":{\"keccak256\":\"0xdec5833ab65ae8cab500b84424dde49c1f7817c6575e1631a729fc88c6d4bd7f\",\"urls\":[\"bzz-raw://2e5d23b8383819e6dd77ea61ed30740bcba45b0fff609922b11d1cae2b0223f1\",\"dweb:/ipfs/QmQ27sefXEYXBUSEGdPkuzCqemtUJzNXhhsyd7kB94w6CE\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162000f9338038062000f93833981810160405260208110156200003757600080fd5b505160006200004e6001600160e01b036200011c16565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602062000f39833981519152908290a3506200009b336001600160e01b036200012116565b620000c960405180606001604052806025815260200162000f1460259139826001600160e01b03620001b216565b7faa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de60405180806020018281038252603a81526020018062000f59603a913960400191505060405180910390a15062000788565b335b90565b6001600160a01b038116620001685760405162461bcd60e51b815260040180806020018281038252602681526020018062000eee6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602062000f3983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b815160208301206001600160e01b0319811663690bfe6360e11b1415620001d7575060005b6001600160e01b0319811663b32cdf4d60e01b1415620001fc57506001600160e01b03195b6000620002198260016200035260201b6200033a1790919060201c565b9050806001600160a01b0316836001600160a01b031614156200023e5750506200034e565b6001600160a01b0383166200026f57620002688260016200037e60201b620003661790919060201c565b5062000290565b6200028e8284866001620003e760201b620003c017909392919060201c565b505b826001600160a01b0316816001600160a01b0316836001600160e01b0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f5353876040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000310578181015183820152602001620002f6565b50505050905090810190601f1680156200033e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a450505b5050565b6001600160e01b0319811660009081526002830160205260409020546001600160a01b03165b92915050565b60006200039d82846000016200046360201b6200042d1790919060201c565b506001600160e01b031982166000908152600284016020908152604080832080546001600160a01b0319169055600386019091528120620003de916200069b565b50600192915050565b6000620004068486600001620005d160201b620005741790919060201c565b506001600160e01b031984166000908152600286016020908152604080832080546001600160a01b0319166001600160a01b03881617905560038801825290912083516200045792850190620006e6565b50600195945050505050565b60006200047a83836001600160e01b036200065716565b620004885750600062000378565b60006200049f84846001600160e01b036200067716565b90506000620004b7856001600160e01b036200069716565b90508082146200056f576000856000016001830381548110620004d657fe5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660000160018503815481106200050f57fe5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866001016000836001600160e01b0319166001600160e01b031916815260200190815260200160002081905550505b6001600160e01b03198416600090815260018601602052604081205584548590806200059757fe5b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a0219169055905550600191505092915050565b6000620005e883836001600160e01b036200065716565b15620005f75750600062000378565b50815460018082018455600084815260208082206008850401805463ffffffff60079096166004026101000a958602191660e087901c959095029490941790935584546001600160e01b0319909416815293810190915260409092205590565b60006200066e83836001600160e01b036200067716565b15159392505050565b6001600160e01b0319166000908152600191909101602052604090205490565b5490565b50805460018160011615610100020316600290046000825580601f10620006c35750620006e3565b601f016020900490600052602060002090810190620006e391906200076b565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200072957805160ff191683800117855562000759565b8280016001018555821562000759579182015b82811115620007595782518255916020019190600101906200073c565b50620007679291506200076b565b5090565b6200011e91905b8082111562000767576000815560010162000772565b61075680620007986000396000f3fe6080604052600436106100385760003560e01c8063715018a61461004f5780638da5cb5b14610064578063f2fde38b1461009557610047565b36610047576100456100c8565b005b6100456100c8565b34801561005b57600080fd5b506100456100e2565b34801561007057600080fd5b50610079610196565b604080516001600160a01b039092168252519081900360200190f35b3480156100a157600080fd5b50610045600480360360208110156100b857600080fd5b50356001600160a01b03166101a6565b6100d06100e0565b6100e06100db61021c565b610272565b565b6100ea610296565b6000546001600160a01b0390811691161461014c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03165b90565b6101ae610296565b6000546001600160a01b03908116911614610210576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6102198161029a565b50565b60008061023b60016001600160e01b031983351663ffffffff61033a16565b90506001600160a01b038116156102535790506101a3565b61026660016001600160e01b031961033a565b9150506101a3565b5090565b3660008037600080366000845af43d6000803e808015610291573d6000f35b3d6000fd5b3390565b6001600160a01b0381166102df5760405162461bcd60e51b81526004018080602001828103825260268152602001806106fb6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160e01b0319811660009081526002830160205260409020546001600160a01b03165b92915050565b6000610378838363ffffffff61042d16565b506001600160e01b031982166000908152600284016020908152604080832080546001600160a01b03191690556003860190915281206103b791610626565b50600192915050565b60006103d2858563ffffffff61057416565b506001600160e01b031984166000908152600286016020908152604080832080546001600160a01b0319166001600160a01b03881617905560038801825290912083516104219285019061066a565b50600195945050505050565b600061043983836105ed565b61044557506000610360565b60006104518484610602565b9050600061045e85610622565b905080821461051357600085600001600183038154811061047b57fe5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660000160018503815481106104b357fe5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866001016000836001600160e01b0319166001600160e01b031916815260200190815260200160002081905550505b6001600160e01b031984166000908152600186016020526040812055845485908061053a57fe5b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a0219169055905550600191505092915050565b600061058083836105ed565b1561058d57506000610360565b50815460018082018455600084815260208082206008850401805463ffffffff60079096166004026101000a958602191660e087901c959095029490941790935584546001600160e01b0319909416815293810190915260409092205590565b60006105f98383610602565b15159392505050565b6001600160e01b0319166000908152600191909101602052604090205490565b5490565b50805460018160011615610100020316600290046000825580601f1061064c5750610219565b601f01602090049060005260206000209081019061021991906106e0565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106106ab57805160ff19168380011785556106d8565b828001600101855582156106d8579182015b828111156106d85782518255916020019190600101906106bd565b5061026e9291505b6101a391905b8082111561026e57600081556001016106e656fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d24d03da5c0af07060348adaf9368c37562adf7d53e06b4ebe9ac4a638db4a7f64736f6c634300060400334f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373757064617465436f6e747261637428616464726573732c737472696e672c737472696e67298be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e04164646564204552433135333820757064617465436f6e74726163742066756e6374696f6e20617420636f6e7472616374206372656174696f6e",
  "deployedBytecode": "0x6080604052600436106100385760003560e01c8063715018a61461004f5780638da5cb5b14610064578063f2fde38b1461009557610047565b36610047576100456100c8565b005b6100456100c8565b34801561005b57600080fd5b506100456100e2565b34801561007057600080fd5b50610079610196565b604080516001600160a01b039092168252519081900360200190f35b3480156100a157600080fd5b50610045600480360360208110156100b857600080fd5b50356001600160a01b03166101a6565b6100d06100e0565b6100e06100db61021c565b610272565b565b6100ea610296565b6000546001600160a01b0390811691161461014c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03165b90565b6101ae610296565b6000546001600160a01b03908116911614610210576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6102198161029a565b50565b60008061023b60016001600160e01b031983351663ffffffff61033a16565b90506001600160a01b038116156102535790506101a3565b61026660016001600160e01b031961033a565b9150506101a3565b5090565b3660008037600080366000845af43d6000803e808015610291573d6000f35b3d6000fd5b3390565b6001600160a01b0381166102df5760405162461bcd60e51b81526004018080602001828103825260268152602001806106fb6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160e01b0319811660009081526002830160205260409020546001600160a01b03165b92915050565b6000610378838363ffffffff61042d16565b506001600160e01b031982166000908152600284016020908152604080832080546001600160a01b03191690556003860190915281206103b791610626565b50600192915050565b60006103d2858563ffffffff61057416565b506001600160e01b031984166000908152600286016020908152604080832080546001600160a01b0319166001600160a01b03881617905560038801825290912083516104219285019061066a565b50600195945050505050565b600061043983836105ed565b61044557506000610360565b60006104518484610602565b9050600061045e85610622565b905080821461051357600085600001600183038154811061047b57fe5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660000160018503815481106104b357fe5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866001016000836001600160e01b0319166001600160e01b031916815260200190815260200160002081905550505b6001600160e01b031984166000908152600186016020526040812055845485908061053a57fe5b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a0219169055905550600191505092915050565b600061058083836105ed565b1561058d57506000610360565b50815460018082018455600084815260208082206008850401805463ffffffff60079096166004026101000a958602191660e087901c959095029490941790935584546001600160e01b0319909416815293810190915260409092205590565b60006105f98383610602565b15159392505050565b6001600160e01b0319166000908152600191909101602052604090205490565b5490565b50805460018160011615610100020316600290046000825580601f1061064c5750610219565b601f01602090049060005260206000209081019061021991906106e0565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106106ab57805160ff19168380011785556106d8565b828001600101855582156106d8579182015b828111156106d85782518255916020019190600101906106bd565b5061026e9291505b6101a391905b8082111561026e57600081556001016106e656fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d24d03da5c0af07060348adaf9368c37562adf7d53e06b4ebe9ac4a638db4a7f64736f6c63430006040033",
  "sourceMap": "97:535:8:-:0;;;144:240;5:9:-1;2:2;;;27:1;24;17:12;2:2;144:240:8;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;144:240:8;832:17:30;852:12;-1:-1:-1;;;;;852:10:30;:12;:::i;:::-;874:6;:18;;-1:-1:-1;;;;;;874:18:30;-1:-1:-1;;;;;874:18:30;;;;;;;907:43;;874:18;;-1:-1:-1;874:18:30;-1:-1:-1;;;;;;;;;;;907:43:30;874:6;;907:43;-1:-1:-1;195:30:8;214:10;-1:-1:-1;;;;;195:18:8;:30;:::i;:::-;229:67;;;;;;;;;;;;;;;;;;279:16;-1:-1:-1;;;;;229:8:8;:67;:::i;:::-;305:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;144:240;97:535;;735:104:29;822:10;735:104;;:::o;2166:233:30:-;-1:-1:-1;;;;;2247:22:30;;2239:73;;;;-1:-1:-1;;;2239:73:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2348:6;;;2327:38;;-1:-1:-1;;;;;2327:38:30;;;;2348:6;;;-1:-1:-1;;;;;;;;;;;2327:38:30;;2375:6;:17;;-1:-1:-1;;;;;;2375:17:30;-1:-1:-1;;;;;2375:17:30;;;;;;;;;;2166:233::o;469:633:3:-;576:31;;;;;;-1:-1:-1;;;;;;616:17:3;;-1:-1:-1;;;616:17:3;612:56;;;-1:-1:-1;654:10:3;612:56;-1:-1:-1;;;;;;675:18:3;;-1:-1:-1;;;675:18:3;671:56;;;-1:-1:-1;;;;;;;671:56:3;731:19;753:22;768:6;753:7;:14;;;;;;:22;;;;:::i;:::-;731:44;;800:11;-1:-1:-1;;;;;784:27:3;:12;-1:-1:-1;;;;;784:27:3;;780:245;;;842:7;;;;780:245;-1:-1:-1;;;;;865:26:3;;861:164;;910:19;922:6;910:7;:11;;;;;;:19;;;;:::i;:::-;;861:164;;;965:55;977:6;985:12;1005:13;965:7;:11;;;;;;:55;;;;;;:::i;:::-;;861:164;1070:12;-1:-1:-1;;;;;1034:64:3;1057:11;-1:-1:-1;;;;;1034:64:3;1049:6;-1:-1:-1;;;;;1034:64:3;;;1084:13;1034:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1034:64:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;469:633;;;;;:::o;375:116:32:-;-1:-1:-1;;;;;;469:18:32;;447:7;469:18;;;:12;;;:18;;;;;;-1:-1:-1;;;;;469:18:32;375:116;;;;;:::o;1537:176::-;1601:4;1612:24;1631:4;1612;:11;;:18;;;;;;:24;;;;:::i;:::-;-1:-1:-1;;;;;;;1647:18:32;;;;;;:12;;;:18;;;;;;;;1640:25;;-1:-1:-1;;;;;;1640:25:32;;;1676:12;;;:18;;;;;1669:25;;;:::i;:::-;-1:-1:-1;1705:4:32;1537:176;;;;:::o;1306:228::-;1419:4;1430:21;1446:4;1430;:11;;:15;;;;;;:21;;;;:::i;:::-;-1:-1:-1;;;;;;;1455:18:32;;;;;;:12;;;:18;;;;;;;;:28;;-1:-1:-1;;;;;;1455:28:32;-1:-1:-1;;;;;1455:28:32;;;;;1487:12;;;:18;;;;;:28;;;;;;;;:::i;:::-;-1:-1:-1;1526:4:32;;1306:228;-1:-1:-1;;;;;1306:228:32:o;937:416:33:-;1006:4;1022:22;1031:4;1037:6;-1:-1:-1;;;;;1022:8:33;:22;:::i;:::-;1017:53;;-1:-1:-1;1060:5:33;1053:12;;1017:53;1074:9;1089:21;1097:4;1103:6;-1:-1:-1;;;;;1089:7:33;:21;:::i;:::-;1074:36;-1:-1:-1;1114:12:33;1129;1136:4;-1:-1:-1;;;;;1129:6:33;:12;:::i;:::-;1114:27;;1155:4;1150:1;:9;1146:135;;1168:17;1188:4;:11;;1207:1;1200:4;:8;1188:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1168:41;;1235:9;1214:4;:11;;1230:1;1226;:5;1214:18;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;1275:1;1249:4;:12;;:23;1262:9;-1:-1:-1;;;;;1249:23:33;;-1:-1:-1;;;;;1249:23:33;;;;;;;;;;;;;:27;;;;1146:135;;-1:-1:-1;;;;;;1292:20:33;;;;;;:12;;;:20;;;;;1285:27;1316:17;;1292:4;;1316:17;;;;;;;;;;;;;-1:-1:-1;;1316:17:33;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1316:17:33;;-1:-1:-1;;937:416:33;;;;:::o;714:220::-;780:4;795:22;804:4;810:6;-1:-1:-1;;;;;795:8:33;:22;:::i;:::-;791:52;;;-1:-1:-1;833:5:33;826:12;;791:52;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;-1:-1;846:24:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;897:18;;-1:-1:-1;;;;;;874:20:33;;;;;:12;;;:20;;;;;;;:41;39:1:-1;714:220:33:o;481:124::-;557:4;575:21;583:4;589:6;-1:-1:-1;;;;;575:7:33;:21;:::i;:::-;:26;;;481:124;-1:-1:-1;;;481:124:33:o;358:120::-;-1:-1:-1;;;;;;454:20:33;433:7;454:20;;;:12;;;;;:20;;;;;;;358:120::o;133:101::-;212:18;;133:101::o;97:535:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;97:535:8;;;-1:-1:-1;97:535:8;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "97:535:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;459:11:27;:9;:11::i;:::-;97:535:8;;596:11:27;:9;:11::i;1656:145:30:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1656:145:30;;;:::i;1033:77::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1033:77:30;;;:::i;:::-;;;;-1:-1:-1;;;;;1033:77:30;;;;;;;;;;;;;;1950:115;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1950:115:30;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1950:115:30;-1:-1:-1;;;;;1950:115:30;;:::i;2133:90:27:-;2169:15;:13;:15::i;:::-;2190:28;2200:17;:15;:17::i;:::-;2190:9;:28::i;:::-;2133:90::o;1656:145:30:-;1247:12;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:30;;;:22;;;1229:67;;;;;-1:-1:-1;;;1229:67:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1762:1:::1;1746:6:::0;;1725:40:::1;::::0;-1:-1:-1;;;;;1746:6:30;;::::1;::::0;1725:40:::1;::::0;1762:1;;1725:40:::1;1792:1;1775:19:::0;;-1:-1:-1;;;;;;1775:19:30::1;::::0;;1656:145::o;1033:77::-;1071:7;1097:6;-1:-1:-1;;;;;1097:6:30;1033:77;;:::o;1950:115::-;1247:12;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:30;;;:22;;;1229:67;;;;;-1:-1:-1;;;1229:67:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2030:28:::1;2049:8;2030:18;:28::i;:::-;1950:115:::0;:::o;387:243:8:-;446:7;;483:23;:7;-1:-1:-1;;;;;;498:7:8;;;483:23;:14;:23;:::i;:::-;460:46;-1:-1:-1;;;;;;515:26:8;;;511:116;;557:12;-1:-1:-1;550:19:8;;511:116;596:26;:7;-1:-1:-1;;;;;;596:14:8;:26::i;:::-;589:33;;;;;511:116;387:243;;:::o;1039:743:27:-;1341:14;1338:1;1335;1322:34;1537:1;1534;1518:14;1515:1;1499:14;1492:5;1479:60;1601:16;1598:1;1595;1580:38;1633:6;1688:38;;;;1753:16;1750:1;1743:27;1688:38;1707:16;1704:1;1697:27;735:104:29;822:10;735:104;:::o;2166:233:30:-;-1:-1:-1;;;;;2247:22:30;;2239:73;;;;-1:-1:-1;;;2239:73:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2348:6;;;2327:38;;-1:-1:-1;;;;;2327:38:30;;;;2348:6;;;2327:38;;;2375:6;:17;;-1:-1:-1;;;;;;2375:17:30;-1:-1:-1;;;;;2375:17:30;;;;;;;;;;2166:233::o;375:116:32:-;-1:-1:-1;;;;;;469:18:32;;447:7;469:18;;;:12;;;:18;;;;;;-1:-1:-1;;;;;469:18:32;375:116;;;;;:::o;1537:176::-;1601:4;1612:24;:4;1631;1612:24;:18;:24;:::i;:::-;-1:-1:-1;;;;;;;1647:18:32;;;;;;:12;;;:18;;;;;;;;1640:25;;-1:-1:-1;;;;;;1640:25:32;;;1676:12;;;:18;;;;;1669:25;;;:::i;:::-;-1:-1:-1;1705:4:32;1537:176;;;;:::o;1306:228::-;1419:4;1430:21;:4;1446;1430:21;:15;:21;:::i;:::-;-1:-1:-1;;;;;;;1455:18:32;;;;;;:12;;;:18;;;;;;;;:28;;-1:-1:-1;;;;;;1455:28:32;-1:-1:-1;;;;;1455:28:32;;;;;1487:12;;;:18;;;;;:28;;;;;;;;:::i;:::-;-1:-1:-1;1526:4:32;;1306:228;-1:-1:-1;;;;;1306:228:32:o;937:416:33:-;1006:4;1022:22;1031:4;1037:6;1022:8;:22::i;:::-;1017:53;;-1:-1:-1;1060:5:33;1053:12;;1017:53;1074:9;1089:21;1097:4;1103:6;1089:7;:21::i;:::-;1074:36;;1114:12;1129;1136:4;1129:6;:12::i;:::-;1114:27;;1155:4;1150:1;:9;1146:135;;1168:17;1188:4;:11;;1207:1;1200:4;:8;1188:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1168:41;;1235:9;1214:4;:11;;1230:1;1226;:5;1214:18;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;1275:1;1249:4;:12;;:23;1262:9;-1:-1:-1;;;;;1249:23:33;;-1:-1:-1;;;;;1249:23:33;;;;;;;;;;;;;:27;;;;1146:135;;-1:-1:-1;;;;;;1292:20:33;;;;;;:12;;;:20;;;;;1285:27;1316:17;;1292:4;;1316:17;;;;;;;;;;;;;-1:-1:-1;;1316:17:33;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1316:17:33;;-1:-1:-1;;937:416:33;;;;:::o;714:220::-;780:4;795:22;804:4;810:6;795:8;:22::i;:::-;791:52;;;-1:-1:-1;833:5:33;826:12;;791:52;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;-1:-1;846:24:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;897:18;;-1:-1:-1;;;;;;874:20:33;;;;;:12;;;:20;;;;;;;:41;39:1:-1;714:220:33:o;481:124::-;557:4;575:21;583:4;589:6;575:7;:21::i;:::-;:26;;;481:124;-1:-1:-1;;;481:124:33:o;358:120::-;-1:-1:-1;;;;;;454:20:33;433:7;454:20;;;:12;;;;;:20;;;;;;;358:120::o;133:101::-;212:18;;133:101::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity ^0.6.0;\n\nimport \"../../Upgradeability/Proxy.sol\";\nimport \"../ERC1538Core.sol\";\n\n\ncontract ERC1538Proxy is ERC1538Core, Proxy\n{\n\tconstructor(address _erc1538Delegate)\n\tpublic\n\t{\n\t\t_transferOwnership(msg.sender);\n\t\t_setFunc(\"updateContract(address,string,string)\", _erc1538Delegate);\n\t\temit CommitMessage(\"Added ERC1538 updateContract function at contract creation\");\n\t}\n\n\tfunction _implementation() internal override view returns (address)\n\t{\n\t\taddress delegateFunc = m_funcs.value1(msg.sig);\n\n\t\tif (delegateFunc != address(0))\n\t\t{\n\t\t\treturn delegateFunc;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn m_funcs.value1(0xFFFFFFFF);\n\t\t}\n\t}\n}\n",
  "sourcePath": "/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Proxy/ERC1538Proxy.sol",
  "ast": {
    "absolutePath": "/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Proxy/ERC1538Proxy.sol",
    "exportedSymbols": {
      "ERC1538Proxy": [
        1035
      ]
    },
    "id": 1036,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 977,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/Upgradeability/Proxy.sol",
        "file": "../../Upgradeability/Proxy.sol",
        "id": 978,
        "nodeType": "ImportDirective",
        "scope": 1036,
        "sourceUnit": 2840,
        "src": "25:40:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Core.sol",
        "file": "../ERC1538Core.sol",
        "id": 979,
        "nodeType": "ImportDirective",
        "scope": 1036,
        "sourceUnit": 206,
        "src": "66:28:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 980,
              "name": "ERC1538Core",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 205,
              "src": "122:11:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC1538Core_$205",
                "typeString": "contract ERC1538Core"
              }
            },
            "id": 981,
            "nodeType": "InheritanceSpecifier",
            "src": "122:11:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 982,
              "name": "Proxy",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2839,
              "src": "135:5:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Proxy_$2839",
                "typeString": "contract Proxy"
              }
            },
            "id": 983,
            "nodeType": "InheritanceSpecifier",
            "src": "135:5:8"
          }
        ],
        "contractDependencies": [
          205,
          1107,
          1124,
          2839,
          3003,
          3123
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1035,
        "linearizedBaseContracts": [
          1035,
          2839,
          205,
          1107,
          3123,
          3003,
          1124
        ],
        "name": "ERC1538Proxy",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1002,
              "nodeType": "Block",
              "src": "191:193:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 989,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "214:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 990,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "214:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 988,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3122,
                      "src": "195:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "195:30:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 992,
                  "nodeType": "ExpressionStatement",
                  "src": "195:30:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "757064617465436f6e747261637428616464726573732c737472696e672c737472696e6729",
                        "id": 994,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "238:39:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6145556710ea545cbd23b05426d1c42aa5025511b47f500956dfd3af0ab263ee",
                          "typeString": "literal_string \"updateContract(address,string,string)\""
                        },
                        "value": "updateContract(address,string,string)"
                      },
                      {
                        "argumentTypes": null,
                        "id": 995,
                        "name": "_erc1538Delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 985,
                        "src": "279:16:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_6145556710ea545cbd23b05426d1c42aa5025511b47f500956dfd3af0ab263ee",
                          "typeString": "literal_string \"updateContract(address,string,string)\""
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 993,
                      "name": "_setFunc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 204,
                      "src": "229:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,address)"
                      }
                    },
                    "id": 996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "229:67:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 997,
                  "nodeType": "ExpressionStatement",
                  "src": "229:67:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "4164646564204552433135333820757064617465436f6e74726163742066756e6374696f6e20617420636f6e7472616374206372656174696f6e",
                        "id": 999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "319:60:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a59507b444e9cf7401adee1e6ab833d42e0e49661985984591c7f0123a26e73c",
                          "typeString": "literal_string \"Added ERC1538 updateContract function at contract creation\""
                        },
                        "value": "Added ERC1538 updateContract function at contract creation"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_a59507b444e9cf7401adee1e6ab833d42e0e49661985984591c7f0123a26e73c",
                          "typeString": "literal_string \"Added ERC1538 updateContract function at contract creation\""
                        }
                      ],
                      "id": 998,
                      "name": "CommitMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        104
                      ],
                      "referencedDeclaration": 104,
                      "src": "305:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 1000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "305:75:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1001,
                  "nodeType": "EmitStatement",
                  "src": "300:80:8"
                }
              ]
            },
            "documentation": null,
            "id": 1003,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 985,
                  "name": "_erc1538Delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1003,
                  "src": "156:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "156:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "155:26:8"
            },
            "returnParameters": {
              "id": 987,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "191:0:8"
            },
            "scope": 1035,
            "src": "144:240:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2812
            ],
            "body": {
              "id": 1033,
              "nodeType": "Block",
              "src": "456:174:8",
              "statements": [
                {
                  "assignments": [
                    1010
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1010,
                      "name": "delegateFunc",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1033,
                      "src": "460:20:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1009,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "460:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1016,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1013,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "498:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sig",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "498:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1011,
                        "name": "m_funcs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1106,
                        "src": "483:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_map_$3205_storage",
                          "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                        }
                      },
                      "id": 1012,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3233,
                      "src": "483:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_map_$3205_storage_ptr_$_t_bytes4_$returns$_t_address_$bound_to$_t_struct$_map_$3205_storage_ptr_$",
                        "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4) view returns (address)"
                      }
                    },
                    "id": 1015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "483:23:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "460:46:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1017,
                      "name": "delegateFunc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1010,
                      "src": "515:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "539:1:8",
                          "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": 1019,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "531:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1018,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "531:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "531:10:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "515:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1031,
                    "nodeType": "Block",
                    "src": "584:43:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30784646464646464646",
                              "id": 1028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "611:10:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4294967295_by_1",
                                "typeString": "int_const 4294967295"
                              },
                              "value": "0xFFFFFFFF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_4294967295_by_1",
                                "typeString": "int_const 4294967295"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1026,
                              "name": "m_funcs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1106,
                              "src": "596:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_map_$3205_storage",
                                "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                              }
                            },
                            "id": 1027,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3233,
                            "src": "596:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_map_$3205_storage_ptr_$_t_bytes4_$returns$_t_address_$bound_to$_t_struct$_map_$3205_storage_ptr_$",
                              "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4) view returns (address)"
                            }
                          },
                          "id": 1029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "596:26:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1008,
                        "id": 1030,
                        "nodeType": "Return",
                        "src": "589:33:8"
                      }
                    ]
                  },
                  "id": 1032,
                  "nodeType": "IfStatement",
                  "src": "511:116:8",
                  "trueBody": {
                    "id": 1025,
                    "nodeType": "Block",
                    "src": "545:29:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1023,
                          "name": "delegateFunc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1010,
                          "src": "557:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1008,
                        "id": 1024,
                        "nodeType": "Return",
                        "src": "550:19:8"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 1034,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_implementation",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1005,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "423:8:8"
            },
            "parameters": {
              "id": 1004,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "411:2:8"
            },
            "returnParameters": {
              "id": 1008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1007,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1034,
                  "src": "446:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1006,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "446:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "445:9:8"
            },
            "scope": 1035,
            "src": "387:243:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1036,
        "src": "97:535:8"
      }
    ],
    "src": "0:633:8"
  },
  "legacyAST": {
    "absolutePath": "/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Proxy/ERC1538Proxy.sol",
    "exportedSymbols": {
      "ERC1538Proxy": [
        1035
      ]
    },
    "id": 1036,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 977,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/Upgradeability/Proxy.sol",
        "file": "../../Upgradeability/Proxy.sol",
        "id": 978,
        "nodeType": "ImportDirective",
        "scope": 1036,
        "sourceUnit": 2840,
        "src": "25:40:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/npm/iexec-solidity/contracts/ERC1538/ERC1538Core.sol",
        "file": "../ERC1538Core.sol",
        "id": 979,
        "nodeType": "ImportDirective",
        "scope": 1036,
        "sourceUnit": 206,
        "src": "66:28:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 980,
              "name": "ERC1538Core",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 205,
              "src": "122:11:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC1538Core_$205",
                "typeString": "contract ERC1538Core"
              }
            },
            "id": 981,
            "nodeType": "InheritanceSpecifier",
            "src": "122:11:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 982,
              "name": "Proxy",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2839,
              "src": "135:5:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Proxy_$2839",
                "typeString": "contract Proxy"
              }
            },
            "id": 983,
            "nodeType": "InheritanceSpecifier",
            "src": "135:5:8"
          }
        ],
        "contractDependencies": [
          205,
          1107,
          1124,
          2839,
          3003,
          3123
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1035,
        "linearizedBaseContracts": [
          1035,
          2839,
          205,
          1107,
          3123,
          3003,
          1124
        ],
        "name": "ERC1538Proxy",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1002,
              "nodeType": "Block",
              "src": "191:193:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 989,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "214:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 990,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "214:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 988,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3122,
                      "src": "195:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "195:30:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 992,
                  "nodeType": "ExpressionStatement",
                  "src": "195:30:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "757064617465436f6e747261637428616464726573732c737472696e672c737472696e6729",
                        "id": 994,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "238:39:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6145556710ea545cbd23b05426d1c42aa5025511b47f500956dfd3af0ab263ee",
                          "typeString": "literal_string \"updateContract(address,string,string)\""
                        },
                        "value": "updateContract(address,string,string)"
                      },
                      {
                        "argumentTypes": null,
                        "id": 995,
                        "name": "_erc1538Delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 985,
                        "src": "279:16:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_6145556710ea545cbd23b05426d1c42aa5025511b47f500956dfd3af0ab263ee",
                          "typeString": "literal_string \"updateContract(address,string,string)\""
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 993,
                      "name": "_setFunc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 204,
                      "src": "229:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,address)"
                      }
                    },
                    "id": 996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "229:67:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 997,
                  "nodeType": "ExpressionStatement",
                  "src": "229:67:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "4164646564204552433135333820757064617465436f6e74726163742066756e6374696f6e20617420636f6e7472616374206372656174696f6e",
                        "id": 999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "319:60:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a59507b444e9cf7401adee1e6ab833d42e0e49661985984591c7f0123a26e73c",
                          "typeString": "literal_string \"Added ERC1538 updateContract function at contract creation\""
                        },
                        "value": "Added ERC1538 updateContract function at contract creation"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_a59507b444e9cf7401adee1e6ab833d42e0e49661985984591c7f0123a26e73c",
                          "typeString": "literal_string \"Added ERC1538 updateContract function at contract creation\""
                        }
                      ],
                      "id": 998,
                      "name": "CommitMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        104
                      ],
                      "referencedDeclaration": 104,
                      "src": "305:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 1000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "305:75:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1001,
                  "nodeType": "EmitStatement",
                  "src": "300:80:8"
                }
              ]
            },
            "documentation": null,
            "id": 1003,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 985,
                  "name": "_erc1538Delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1003,
                  "src": "156:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "156:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "155:26:8"
            },
            "returnParameters": {
              "id": 987,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "191:0:8"
            },
            "scope": 1035,
            "src": "144:240:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2812
            ],
            "body": {
              "id": 1033,
              "nodeType": "Block",
              "src": "456:174:8",
              "statements": [
                {
                  "assignments": [
                    1010
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1010,
                      "name": "delegateFunc",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1033,
                      "src": "460:20:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1009,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "460:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1016,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1013,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "498:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sig",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "498:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1011,
                        "name": "m_funcs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1106,
                        "src": "483:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_map_$3205_storage",
                          "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                        }
                      },
                      "id": 1012,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3233,
                      "src": "483:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_map_$3205_storage_ptr_$_t_bytes4_$returns$_t_address_$bound_to$_t_struct$_map_$3205_storage_ptr_$",
                        "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4) view returns (address)"
                      }
                    },
                    "id": 1015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "483:23:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "460:46:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1017,
                      "name": "delegateFunc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1010,
                      "src": "515:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "539:1:8",
                          "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": 1019,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "531:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1018,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "531:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "531:10:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "515:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1031,
                    "nodeType": "Block",
                    "src": "584:43:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30784646464646464646",
                              "id": 1028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "611:10:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4294967295_by_1",
                                "typeString": "int_const 4294967295"
                              },
                              "value": "0xFFFFFFFF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_4294967295_by_1",
                                "typeString": "int_const 4294967295"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1026,
                              "name": "m_funcs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1106,
                              "src": "596:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_map_$3205_storage",
                                "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                              }
                            },
                            "id": 1027,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3233,
                            "src": "596:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_map_$3205_storage_ptr_$_t_bytes4_$returns$_t_address_$bound_to$_t_struct$_map_$3205_storage_ptr_$",
                              "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4) view returns (address)"
                            }
                          },
                          "id": 1029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "596:26:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1008,
                        "id": 1030,
                        "nodeType": "Return",
                        "src": "589:33:8"
                      }
                    ]
                  },
                  "id": 1032,
                  "nodeType": "IfStatement",
                  "src": "511:116:8",
                  "trueBody": {
                    "id": 1025,
                    "nodeType": "Block",
                    "src": "545:29:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1023,
                          "name": "delegateFunc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1010,
                          "src": "557:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1008,
                        "id": 1024,
                        "nodeType": "Return",
                        "src": "550:19:8"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 1034,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_implementation",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1005,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "423:8:8"
            },
            "parameters": {
              "id": 1004,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "411:2:8"
            },
            "returnParameters": {
              "id": 1008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1007,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1034,
                  "src": "446:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1006,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "446:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "445:9:8"
            },
            "scope": 1035,
            "src": "387:243:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1036,
        "src": "97:535:8"
      }
    ],
    "src": "0:633:8"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.4+commit.1dca32f3.Emscripten.clang"
  },
  "networks": {
    "1": {
      "events": {
        "0xaa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "message",
              "type": "string"
            }
          ],
          "name": "CommitMessage",
          "type": "event"
        },
        "0x3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f5353": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes4",
              "name": "functionId",
              "type": "bytes4"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "oldDelegate",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newDelegate",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "string",
              "name": "functionSignature",
              "type": "string"
            }
          ],
          "name": "FunctionUpdate",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x3eca1B216A7DF1C7689aEb259fFB83ADFB894E7f"
    },
    "3": {
      "events": {
        "0xaa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "message",
              "type": "string"
            }
          ],
          "name": "CommitMessage",
          "type": "event"
        },
        "0x3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f5353": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes4",
              "name": "functionId",
              "type": "bytes4"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "oldDelegate",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newDelegate",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "string",
              "name": "functionSignature",
              "type": "string"
            }
          ],
          "name": "FunctionUpdate",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x3eca1B216A7DF1C7689aEb259fFB83ADFB894E7f"
    },
    "4": {
      "events": {
        "0xaa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "message",
              "type": "string"
            }
          ],
          "name": "CommitMessage",
          "type": "event"
        },
        "0x3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f5353": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes4",
              "name": "functionId",
              "type": "bytes4"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "oldDelegate",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newDelegate",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "string",
              "name": "functionSignature",
              "type": "string"
            }
          ],
          "name": "FunctionUpdate",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x3eca1B216A7DF1C7689aEb259fFB83ADFB894E7f"
    },
    "5": {
      "events": {
        "0xaa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "message",
              "type": "string"
            }
          ],
          "name": "CommitMessage",
          "type": "event"
        },
        "0x3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f5353": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes4",
              "name": "functionId",
              "type": "bytes4"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "oldDelegate",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newDelegate",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "string",
              "name": "functionSignature",
              "type": "string"
            }
          ],
          "name": "FunctionUpdate",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x3eca1B216A7DF1C7689aEb259fFB83ADFB894E7f"
    },
    "42": {
      "events": {
        "0xaa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "message",
              "type": "string"
            }
          ],
          "name": "CommitMessage",
          "type": "event"
        },
        "0x3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f5353": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes4",
              "name": "functionId",
              "type": "bytes4"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "oldDelegate",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newDelegate",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "string",
              "name": "functionSignature",
              "type": "string"
            }
          ],
          "name": "FunctionUpdate",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x3eca1B216A7DF1C7689aEb259fFB83ADFB894E7f"
    }
  },
  "schemaVersion": "3.1.0",
  "updatedAt": "2020-04-21T19:16:56.013Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    }
  },
  "userdoc": {
    "methods": {}
  }
}