{
  "contractName": "ERC1538Core",
  "abi": [
    {
      "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"
    },
    {
      "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"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\"},{\"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\"}],\"devdoc\":{\"kind\":\"dev\",\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/ERC1538Core.sol\":\"ERC1538Core\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/ERC1538Core.sol\":{\"keccak256\":\"0x8a9cab9e6b0318cfcacc251611d7b66c38c21a862f74fbb999a02952e6b0caae\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e424c9c9da6be838314f9a286ffb717741ce3307a0ebd3c107fb4cca3246e34\",\"dweb:/ipfs/QmNvBFdxLCDV6xsmXyQUqXv9MhwbnoFq48xV2r6fw652FM\"]},\"/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/ERC1538Store.sol\":{\"keccak256\":\"0xb58c26604758cc810e3913d58fb596b728f3a959198fb2517465d5d845601c83\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0764c9073affa00312746ad08a5761aaf489b4cb3c65763fce8a53db185ab0bd\",\"dweb:/ipfs/QmPs8QuvRg4CUCkWoRMvHnqFmdjSgVwAFy6q7k235Qzzkw\"]},\"/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/IERC1538.sol\":{\"keccak256\":\"0x36d14c0ca4e87e7bd5fee27128bc4918b03fda78df870a5c9ce061036e63800b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8b541c5c487fa93a27c3853d9d4650b842079bb597a8b57fe47a93988447565f\",\"dweb:/ipfs/QmQJPX7osVhtjDqyE1KQte1PkfirVtEMvES2iSPcShooAN\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0xdb26cbf4d028490f49831a7865c2fe1b28db44b535ca8d343785a3b768aae183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://840b14ce0315c47d49ba328f1f9fa7654ded1c9e1559e6c5e777a7b2dc28bf0a\",\"dweb:/ipfs/QmTLLabn4wcfGro9LEmUXUN2nwKqZSotXMvjDCLXEnLtZP\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x4bd6402ca6b3419008c2b482aff54e66836e8cb4eba2680e42ac5884ae6424fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f9f711fb8d0d92aeea1c327e3845d13ca1fa8f142e47f8723cd5b3106fb29a3\",\"dweb:/ipfs/QmVQUReDW9f4zGqhizwHnyU8EntMs95tbASdqkGncnikba\"]},\"solstruct/contracts/libs/LibMap2.bytes4.address.bytes.sol\":{\"keccak256\":\"0xde4da3fc60926f373ab427e6a07f837b773cd220554c1d895e45ec89b3ac069f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0dc8d9235bd4795815ec0e2ccea2dc7847a88c04d01af06e67a081ea269b9943\",\"dweb:/ipfs/QmbPrKGJsZcPXXSpZqJPuiFNjVwjbvtgrMpdY6asA1BouT\"]},\"solstruct/contracts/libs/LibSet.bytes4.sol\":{\"keccak256\":\"0xbb3001b2c52c250106497a5567454442c021e575c696da948a472d4390e63920\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c639b4d68cf6152560d1826bb38fb162c6ee0d2a6fb4a56d0888d7a41efc58c5\",\"dweb:/ipfs/QmaKLDhS5BJPiobaktgMg5dYEML7JKRi2pkkvAmDQLJAXs\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6102c78061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b14610074575b600080fd5b61004e61009a565b005b61005861014e565b604080516001600160a01b039092168252519081900360200190f35b61004e6004803603602081101561008a57600080fd5b50356001600160a01b031661015d565b6100a2610267565b6000546001600160a01b03908116911614610104576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610165610267565b6000546001600160a01b039081169116146101c7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661020c5760405162461bcd60e51b815260040180806020018281038252602681526020018061026c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220e3b5cbc903befa389d927f2b49f4b00d5947c5a2ed97e25cf347446af146a9b064736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b14610074575b600080fd5b61004e61009a565b005b61005861014e565b604080516001600160a01b039092168252519081900360200190f35b61004e6004803603602081101561008a57600080fd5b50356001600160a01b031661015d565b6100a2610267565b6000546001600160a01b03908116911614610104576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610165610267565b6000546001600160a01b039081169116146101c7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661020c5760405162461bcd60e51b815260040180806020018281038252602681526020018061026c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220e3b5cbc903befa389d927f2b49f4b00d5947c5a2ed97e25cf347446af146a9b064736f6c634300060c0033",
  "immutableReferences": {},
  "sourceMap": "1322:1024:5:-:0;;;;;;;;;;;;-1:-1:-1;865:17:29;885:12;:10;:12::i;:::-;907:6;:18;;-1:-1:-1;;;;;;907:18:29;-1:-1:-1;;;;;907:18:29;;;;;;;940:43;;907:18;;-1:-1:-1;907:18:29;940:43;;907:6;;940:43;831:159;1322:1024:5;;590:104:28;677:10;590:104;:::o;1322:1024:5:-;;;;;;;",
  "deployedSourceMap": "1322:1024:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1689:145:29;;;:::i;:::-;;1066:77;;;:::i;:::-;;;;-1:-1:-1;;;;;1066:77:29;;;;;;;;;;;;;;1983:240;;;;;;;;;;;;;;;;-1:-1:-1;1983:240:29;-1:-1:-1;;;;;1983:240:29;;:::i;1689:145::-;1280:12;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:29;;;:22;;;1262:67;;;;;-1:-1:-1;;;1262:67:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:1:::1;1779:6:::0;;1758:40:::1;::::0;-1:-1:-1;;;;;1779:6:29;;::::1;::::0;1758:40:::1;::::0;1795:1;;1758:40:::1;1825:1;1808:19:::0;;-1:-1:-1;;;;;;1808:19:29::1;::::0;;1689:145::o;1066:77::-;1104:7;1130:6;-1:-1:-1;;;;;1130:6:29;1066:77;:::o;1983:240::-;1280:12;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:29;;;:22;;;1262:67;;;;;-1:-1:-1;;;1262:67:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2071:22:29;::::1;2063:73;;;;-1:-1:-1::0;;;2063:73:29::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2172:6;::::0;;2151:38:::1;::::0;-1:-1:-1;;;;;2151:38:29;;::::1;::::0;2172:6;::::1;::::0;2151:38:::1;::::0;::::1;2199:6;:17:::0;;-1:-1:-1;;;;;;2199:17:29::1;-1:-1:-1::0;;;;;2199:17:29;;;::::1;::::0;;;::::1;::::0;;1983:240::o;590:104:28:-;677:10;590:104;:::o",
  "source": "// SPDX-License-Identifier: Apache-2.0\n\n/******************************************************************************\n * Copyright 2020 IEXEC BLOCKCHAIN TECH                                       *\n *                                                                            *\n * Licensed under the Apache License, Version 2.0 (the \"License\");            *\n * you may not use this file except in compliance with the License.           *\n * You may obtain a copy of the License at                                    *\n *                                                                            *\n *     http://www.apache.org/licenses/LICENSE-2.0                             *\n *                                                                            *\n * Unless required by applicable law or agreed to in writing, software        *\n * distributed under the License is distributed on an \"AS IS\" BASIS,          *\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   *\n * See the License for the specific language governing permissions and        *\n * limitations under the License.                                             *\n ******************************************************************************/\n\npragma solidity ^0.6.0;\n\nimport \"./IERC1538.sol\";\nimport \"./ERC1538Store.sol\";\n\ncontract ERC1538Core is IERC1538, ERC1538Store\n{\n\tbytes4 constant internal RECEIVE  = 0xd217fcc6; // bytes4(keccak256(\"receive\"));\n\tbytes4 constant internal FALLBACK = 0xb32cdf4d; // bytes4(keccak256(\"fallback\"));\n\n\tevent CommitMessage(string message);\n\tevent FunctionUpdate(bytes4 indexed functionId, address indexed oldDelegate, address indexed newDelegate, string functionSignature);\n\n\tfunction _setFunc(string memory funcSignature, address funcDelegate)\n\tinternal\n\t{\n\t\tbytes4 funcId = bytes4(keccak256(bytes(funcSignature)));\n\t\tif (funcId == RECEIVE ) { funcId = bytes4(0x00000000); }\n\t\tif (funcId == FALLBACK) { funcId = bytes4(0xFFFFFFFF); }\n\n\t\taddress oldDelegate = m_funcs.value1(funcId);\n\n\t\tif (funcDelegate == oldDelegate) // No change → skip\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\telse if (funcDelegate == address(0)) // Delete\n\t\t{\n\t\t\tm_funcs.del(funcId);\n\t\t}\n\t\telse // Set / Update\n\t\t{\n\t\t\tm_funcs.set(funcId, funcDelegate, bytes(funcSignature));\n\t\t}\n\n\t\temit FunctionUpdate(funcId, oldDelegate, funcDelegate, funcSignature);\n\t}\n}\n",
  "sourcePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/ERC1538Core.sol",
  "ast": {
    "absolutePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/ERC1538Core.sol",
    "exportedSymbols": {
      "ERC1538Core": [
        361
      ]
    },
    "id": 362,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 244,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1242:23:5"
      },
      {
        "absolutePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/IERC1538.sol",
        "file": "./IERC1538.sol",
        "id": 245,
        "nodeType": "ImportDirective",
        "scope": 362,
        "sourceUnit": 1271,
        "src": "1267:24:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/ERC1538Store.sol",
        "file": "./ERC1538Store.sol",
        "id": 246,
        "nodeType": "ImportDirective",
        "scope": 362,
        "sourceUnit": 1254,
        "src": "1292:28:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 247,
              "name": "IERC1538",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1270,
              "src": "1346:8:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC1538_$1270",
                "typeString": "contract IERC1538"
              }
            },
            "id": 248,
            "nodeType": "InheritanceSpecifier",
            "src": "1346:8:5"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 249,
              "name": "ERC1538Store",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1253,
              "src": "1356:12:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC1538Store_$1253",
                "typeString": "contract ERC1538Store"
              }
            },
            "id": 250,
            "nodeType": "InheritanceSpecifier",
            "src": "1356:12:5"
          }
        ],
        "contractDependencies": [
          1253,
          1270,
          2475,
          2584
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 361,
        "linearizedBaseContracts": [
          361,
          1253,
          2584,
          2475,
          1270
        ],
        "name": "ERC1538Core",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 253,
            "mutability": "constant",
            "name": "RECEIVE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 361,
            "src": "1372:46:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 251,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "1372:6:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786432313766636336",
              "id": 252,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1408:10:5",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3524787398_by_1",
                "typeString": "int_const 3524787398"
              },
              "value": "0xd217fcc6"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 256,
            "mutability": "constant",
            "name": "FALLBACK",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 361,
            "src": "1454:46:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 254,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "1454:6:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786233326364663464",
              "id": 255,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1490:10:5",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3006062413_by_1",
                "typeString": "int_const 3006062413"
              },
              "value": "0xb32cdf4d"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 260,
            "name": "CommitMessage",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 258,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 260,
                  "src": "1558:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 257,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1558:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1557:16:5"
            },
            "src": "1538:36:5"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 270,
            "name": "FunctionUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 269,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 262,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "functionId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 270,
                  "src": "1597:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 261,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "1597:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 264,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "oldDelegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 270,
                  "src": "1624:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1624:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 266,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newDelegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 270,
                  "src": "1653:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 265,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1653:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 268,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "functionSignature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 270,
                  "src": "1682:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 267,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1682:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1596:111:5"
            },
            "src": "1576:132:5"
          },
          {
            "body": {
              "id": 359,
              "nodeType": "Block",
              "src": "1791:553:5",
              "statements": [
                {
                  "assignments": [
                    278
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 278,
                      "mutability": "mutable",
                      "name": "funcId",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 359,
                      "src": "1795:13:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 277,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "1795:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 288,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 284,
                                "name": "funcSignature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 272,
                                "src": "1834:13:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 283,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1828:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 282,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "1828:5:5",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 285,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1828:20:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 281,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "1818:9:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1818:31:5",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1811:6:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": {
                        "id": 279,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "1811:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1811:39:5",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1795:55:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    },
                    "id": 291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 289,
                      "name": "funcId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 278,
                      "src": "1858:6:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 290,
                      "name": "RECEIVE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 253,
                      "src": "1868:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "1858:17:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 300,
                  "nodeType": "IfStatement",
                  "src": "1854:56:5",
                  "trueBody": {
                    "id": 299,
                    "nodeType": "Block",
                    "src": "1878:32:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 292,
                            "name": "funcId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 278,
                            "src": "1880:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303030",
                                "id": 295,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1896:10:5",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0x00000000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1889:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": {
                                "id": 293,
                                "name": "bytes4",
                                "nodeType": "ElementaryTypeName",
                                "src": "1889:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 296,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1889:18:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "1880:27:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 298,
                        "nodeType": "ExpressionStatement",
                        "src": "1880:27:5"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    },
                    "id": 303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 301,
                      "name": "funcId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 278,
                      "src": "1917:6:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 302,
                      "name": "FALLBACK",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 256,
                      "src": "1927:8:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "1917:18:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 312,
                  "nodeType": "IfStatement",
                  "src": "1913:56:5",
                  "trueBody": {
                    "id": 311,
                    "nodeType": "Block",
                    "src": "1937:32:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 304,
                            "name": "funcId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 278,
                            "src": "1939:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30784646464646464646",
                                "id": 307,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1955:10:5",
                                "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"
                                }
                              ],
                              "id": 306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1948:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": {
                                "id": 305,
                                "name": "bytes4",
                                "nodeType": "ElementaryTypeName",
                                "src": "1948:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 308,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1948:18:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "1939:27:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 310,
                        "nodeType": "ExpressionStatement",
                        "src": "1939:27:5"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    314
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 314,
                      "mutability": "mutable",
                      "name": "oldDelegate",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 359,
                      "src": "1973:19:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 313,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1973:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 319,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 317,
                        "name": "funcId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 278,
                        "src": "2010:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 315,
                        "name": "m_funcs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1252,
                        "src": "1995:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_map_$2796_storage",
                          "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                        }
                      },
                      "id": 316,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2824,
                      "src": "1995:14:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_map_$2796_storage_ptr_$_t_bytes4_$returns$_t_address_$bound_to$_t_struct$_map_$2796_storage_ptr_$",
                        "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4) view returns (address)"
                      }
                    },
                    "id": 318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1995:22:5",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1973:44:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 320,
                      "name": "funcDelegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 274,
                      "src": "2026:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 321,
                      "name": "oldDelegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 314,
                      "src": "2042:11:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2026:27:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 330,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 325,
                        "name": "funcDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 274,
                        "src": "2107:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 328,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2131:1:5",
                            "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": 327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2123:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 326,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2123:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2123:10:5",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "2107:26:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 349,
                      "nodeType": "Block",
                      "src": "2202:65:5",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 341,
                                "name": "funcId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 278,
                                "src": "2219:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 342,
                                "name": "funcDelegate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 274,
                                "src": "2227:12:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 345,
                                    "name": "funcSignature",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "2247:13:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 344,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2241:5:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 343,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2241:5:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 346,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2241:20:5",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 338,
                                "name": "m_funcs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1252,
                                "src": "2207:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_map_$2796_storage",
                                  "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                                }
                              },
                              "id": 340,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "set",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2973,
                              "src": "2207:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_map_$2796_storage_ptr_$_t_bytes4_$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_map_$2796_storage_ptr_$",
                                "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4,address,bytes memory) returns (bool)"
                              }
                            },
                            "id": 347,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2207:55:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 348,
                          "nodeType": "ExpressionStatement",
                          "src": "2207:55:5"
                        }
                      ]
                    },
                    "id": 350,
                    "nodeType": "IfStatement",
                    "src": "2103:164:5",
                    "trueBody": {
                      "id": 337,
                      "nodeType": "Block",
                      "src": "2147:29:5",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 334,
                                "name": "funcId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 278,
                                "src": "2164:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 331,
                                "name": "m_funcs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1252,
                                "src": "2152:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_map_$2796_storage",
                                  "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                                }
                              },
                              "id": 333,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "del",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3005,
                              "src": "2152:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_map_$2796_storage_ptr_$_t_bytes4_$returns$_t_bool_$bound_to$_t_struct$_map_$2796_storage_ptr_$",
                                "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4) returns (bool)"
                              }
                            },
                            "id": 335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2152:19:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 336,
                          "nodeType": "ExpressionStatement",
                          "src": "2152:19:5"
                        }
                      ]
                    }
                  },
                  "id": 351,
                  "nodeType": "IfStatement",
                  "src": "2022:245:5",
                  "trueBody": {
                    "id": 324,
                    "nodeType": "Block",
                    "src": "2079:16:5",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 276,
                        "id": 323,
                        "nodeType": "Return",
                        "src": "2084:7:5"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 353,
                        "name": "funcId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 278,
                        "src": "2291:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 354,
                        "name": "oldDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 314,
                        "src": "2299:11:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 355,
                        "name": "funcDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 274,
                        "src": "2312:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 356,
                        "name": "funcSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 272,
                        "src": "2326:13:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 352,
                      "name": "FunctionUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        270
                      ],
                      "referencedDeclaration": 270,
                      "src": "2276:14:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes4_$_t_address_$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes4,address,address,string memory)"
                      }
                    },
                    "id": 357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2276:64:5",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 358,
                  "nodeType": "EmitStatement",
                  "src": "2271:69:5"
                }
              ]
            },
            "documentation": null,
            "id": 360,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setFunc",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 275,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 272,
                  "mutability": "mutable",
                  "name": "funcSignature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 360,
                  "src": "1729:27:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 271,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1729:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 274,
                  "mutability": "mutable",
                  "name": "funcDelegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 360,
                  "src": "1758:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1758:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1728:51:5"
            },
            "returnParameters": {
              "id": 276,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1791:0:5"
            },
            "scope": 361,
            "src": "1711:633:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 362,
        "src": "1322:1024:5"
      }
    ],
    "src": "1242:1105:5"
  },
  "legacyAST": {
    "absolutePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/ERC1538Core.sol",
    "exportedSymbols": {
      "ERC1538Core": [
        361
      ]
    },
    "id": 362,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 244,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1242:23:5"
      },
      {
        "absolutePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/IERC1538.sol",
        "file": "./IERC1538.sol",
        "id": 245,
        "nodeType": "ImportDirective",
        "scope": 362,
        "sourceUnit": 1271,
        "src": "1267:24:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/ERC1538/ERC1538Store.sol",
        "file": "./ERC1538Store.sol",
        "id": 246,
        "nodeType": "ImportDirective",
        "scope": 362,
        "sourceUnit": 1254,
        "src": "1292:28:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 247,
              "name": "IERC1538",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1270,
              "src": "1346:8:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC1538_$1270",
                "typeString": "contract IERC1538"
              }
            },
            "id": 248,
            "nodeType": "InheritanceSpecifier",
            "src": "1346:8:5"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 249,
              "name": "ERC1538Store",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1253,
              "src": "1356:12:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC1538Store_$1253",
                "typeString": "contract ERC1538Store"
              }
            },
            "id": 250,
            "nodeType": "InheritanceSpecifier",
            "src": "1356:12:5"
          }
        ],
        "contractDependencies": [
          1253,
          1270,
          2475,
          2584
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 361,
        "linearizedBaseContracts": [
          361,
          1253,
          2584,
          2475,
          1270
        ],
        "name": "ERC1538Core",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 253,
            "mutability": "constant",
            "name": "RECEIVE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 361,
            "src": "1372:46:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 251,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "1372:6:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786432313766636336",
              "id": 252,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1408:10:5",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3524787398_by_1",
                "typeString": "int_const 3524787398"
              },
              "value": "0xd217fcc6"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 256,
            "mutability": "constant",
            "name": "FALLBACK",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 361,
            "src": "1454:46:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 254,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "1454:6:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786233326364663464",
              "id": 255,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1490:10:5",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3006062413_by_1",
                "typeString": "int_const 3006062413"
              },
              "value": "0xb32cdf4d"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 260,
            "name": "CommitMessage",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 258,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 260,
                  "src": "1558:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 257,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1558:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1557:16:5"
            },
            "src": "1538:36:5"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 270,
            "name": "FunctionUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 269,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 262,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "functionId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 270,
                  "src": "1597:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 261,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "1597:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 264,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "oldDelegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 270,
                  "src": "1624:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1624:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 266,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newDelegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 270,
                  "src": "1653:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 265,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1653:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 268,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "functionSignature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 270,
                  "src": "1682:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 267,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1682:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1596:111:5"
            },
            "src": "1576:132:5"
          },
          {
            "body": {
              "id": 359,
              "nodeType": "Block",
              "src": "1791:553:5",
              "statements": [
                {
                  "assignments": [
                    278
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 278,
                      "mutability": "mutable",
                      "name": "funcId",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 359,
                      "src": "1795:13:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 277,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "1795:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 288,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 284,
                                "name": "funcSignature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 272,
                                "src": "1834:13:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 283,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1828:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 282,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "1828:5:5",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 285,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1828:20:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 281,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "1818:9:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1818:31:5",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1811:6:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": {
                        "id": 279,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "1811:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1811:39:5",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1795:55:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    },
                    "id": 291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 289,
                      "name": "funcId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 278,
                      "src": "1858:6:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 290,
                      "name": "RECEIVE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 253,
                      "src": "1868:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "1858:17:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 300,
                  "nodeType": "IfStatement",
                  "src": "1854:56:5",
                  "trueBody": {
                    "id": 299,
                    "nodeType": "Block",
                    "src": "1878:32:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 292,
                            "name": "funcId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 278,
                            "src": "1880:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783030303030303030",
                                "id": 295,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1896:10:5",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0x00000000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1889:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": {
                                "id": 293,
                                "name": "bytes4",
                                "nodeType": "ElementaryTypeName",
                                "src": "1889:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 296,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1889:18:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "1880:27:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 298,
                        "nodeType": "ExpressionStatement",
                        "src": "1880:27:5"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    },
                    "id": 303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 301,
                      "name": "funcId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 278,
                      "src": "1917:6:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 302,
                      "name": "FALLBACK",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 256,
                      "src": "1927:8:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "1917:18:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 312,
                  "nodeType": "IfStatement",
                  "src": "1913:56:5",
                  "trueBody": {
                    "id": 311,
                    "nodeType": "Block",
                    "src": "1937:32:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 304,
                            "name": "funcId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 278,
                            "src": "1939:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30784646464646464646",
                                "id": 307,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1955:10:5",
                                "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"
                                }
                              ],
                              "id": 306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1948:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": {
                                "id": 305,
                                "name": "bytes4",
                                "nodeType": "ElementaryTypeName",
                                "src": "1948:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 308,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1948:18:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "1939:27:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 310,
                        "nodeType": "ExpressionStatement",
                        "src": "1939:27:5"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    314
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 314,
                      "mutability": "mutable",
                      "name": "oldDelegate",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 359,
                      "src": "1973:19:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 313,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1973:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 319,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 317,
                        "name": "funcId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 278,
                        "src": "2010:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 315,
                        "name": "m_funcs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1252,
                        "src": "1995:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_map_$2796_storage",
                          "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                        }
                      },
                      "id": 316,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2824,
                      "src": "1995:14:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_map_$2796_storage_ptr_$_t_bytes4_$returns$_t_address_$bound_to$_t_struct$_map_$2796_storage_ptr_$",
                        "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4) view returns (address)"
                      }
                    },
                    "id": 318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1995:22:5",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1973:44:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 320,
                      "name": "funcDelegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 274,
                      "src": "2026:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 321,
                      "name": "oldDelegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 314,
                      "src": "2042:11:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2026:27:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 330,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 325,
                        "name": "funcDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 274,
                        "src": "2107:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 328,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2131:1:5",
                            "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": 327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2123:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 326,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2123:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2123:10:5",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "2107:26:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 349,
                      "nodeType": "Block",
                      "src": "2202:65:5",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 341,
                                "name": "funcId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 278,
                                "src": "2219:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 342,
                                "name": "funcDelegate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 274,
                                "src": "2227:12:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 345,
                                    "name": "funcSignature",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "2247:13:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 344,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2241:5:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 343,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2241:5:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 346,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2241:20:5",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 338,
                                "name": "m_funcs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1252,
                                "src": "2207:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_map_$2796_storage",
                                  "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                                }
                              },
                              "id": 340,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "set",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2973,
                              "src": "2207:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_map_$2796_storage_ptr_$_t_bytes4_$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_map_$2796_storage_ptr_$",
                                "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4,address,bytes memory) returns (bool)"
                              }
                            },
                            "id": 347,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2207:55:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 348,
                          "nodeType": "ExpressionStatement",
                          "src": "2207:55:5"
                        }
                      ]
                    },
                    "id": 350,
                    "nodeType": "IfStatement",
                    "src": "2103:164:5",
                    "trueBody": {
                      "id": 337,
                      "nodeType": "Block",
                      "src": "2147:29:5",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 334,
                                "name": "funcId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 278,
                                "src": "2164:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 331,
                                "name": "m_funcs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1252,
                                "src": "2152:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_map_$2796_storage",
                                  "typeString": "struct LibMap2_bytes4_address_bytes.map storage ref"
                                }
                              },
                              "id": 333,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "del",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3005,
                              "src": "2152:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_map_$2796_storage_ptr_$_t_bytes4_$returns$_t_bool_$bound_to$_t_struct$_map_$2796_storage_ptr_$",
                                "typeString": "function (struct LibMap2_bytes4_address_bytes.map storage pointer,bytes4) returns (bool)"
                              }
                            },
                            "id": 335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2152:19:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 336,
                          "nodeType": "ExpressionStatement",
                          "src": "2152:19:5"
                        }
                      ]
                    }
                  },
                  "id": 351,
                  "nodeType": "IfStatement",
                  "src": "2022:245:5",
                  "trueBody": {
                    "id": 324,
                    "nodeType": "Block",
                    "src": "2079:16:5",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 276,
                        "id": 323,
                        "nodeType": "Return",
                        "src": "2084:7:5"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 353,
                        "name": "funcId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 278,
                        "src": "2291:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 354,
                        "name": "oldDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 314,
                        "src": "2299:11:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 355,
                        "name": "funcDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 274,
                        "src": "2312:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 356,
                        "name": "funcSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 272,
                        "src": "2326:13:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 352,
                      "name": "FunctionUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        270
                      ],
                      "referencedDeclaration": 270,
                      "src": "2276:14:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes4_$_t_address_$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes4,address,address,string memory)"
                      }
                    },
                    "id": 357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2276:64:5",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 358,
                  "nodeType": "EmitStatement",
                  "src": "2271:69:5"
                }
              ]
            },
            "documentation": null,
            "id": 360,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setFunc",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 275,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 272,
                  "mutability": "mutable",
                  "name": "funcSignature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 360,
                  "src": "1729:27:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 271,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1729:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 274,
                  "mutability": "mutable",
                  "name": "funcDelegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 360,
                  "src": "1758:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1758:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1728:51:5"
            },
            "returnParameters": {
              "id": 276,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1791:0:5"
            },
            "scope": 361,
            "src": "1711:633:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 362,
        "src": "1322:1024:5"
      }
    ],
    "src": "1242:1105:5"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.5",
  "updatedAt": "2023-05-04T08:29:47.177Z",
  "devdoc": {
    "kind": "dev",
    "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."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}